AngularJS 应用程序与 XAMPP 本地主机上的 PHP 文件通信

Posted

技术标签:

【中文标题】AngularJS 应用程序与 XAMPP 本地主机上的 PHP 文件通信【英文标题】:AngularJS application communcation with PHP file on XAMP Localhost 【发布时间】:2016-05-31 17:03:24 【问题描述】:

我已经遇到这个问题超过一天了,对此我束手无策!首先,我以前从未与AngularJS 合作过,虽然我可以看到好处,但学习曲线却很大。我正在尝试使用$httpd.post() 将来自Angular 应用程序的请求发送到php 文件,但每次我这样做时,我都会在控制台中收到以下错误:

XMLHttpRequest cannot load http://localhost/angular-service/index.php. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.

让我更详细地说。

Angular 应用程序在 Gulp server 上运行,PHP 文件托管在 XAMP localhost 上。 Gulp 正在端口 8080 上运行,XAMP 在端口 80 上运行。

我尝试通过转到httpd.conf 文件并在最底部添加以下内容来配置 XAMP 以启用 CORS 标头:

<Directory />
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Headers "Content-Type"
    Header set Access-Control-Allow-Methods "GET, PUT, OPTIONS, DELETE, POST"
</Directory>

很遗憾,这并没有产生任何影响。

我的angular 应用程序中发出请求的代码块在这里:

 $scope.getSomething = function ()        
     $http(
          method: "POST",
          url: "http://localhost/angular-service/index.php",
          data: "",
          headers: 'Content-Type': 'application/x-www-form-urlencoded'
        ).
        success(function(response) 
            if(response==1)
               console.log(response);
            
        ).
        error(function(response)
            console.log(response);
        );
    

PHP 文件在这里:

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
echo "I'm a PHP File";

谁能指出我需要做些什么来解决这个问题的正确方向。真是令人沮丧!

【问题讨论】:

【参考方案1】:

我建议您也将请求方法添加到您的 PHP 文件中。 这是一个例子:

<?php
   header("Access-Control-Allow-Origin: http://yourdomain");

   /* Allowed request method */
   header("Access-Control-Allow-Methods: PUT");

   /* Allowed custom header */
   header("Access-Control-Allow-Headers: Content-Type");

   /* Age set to 1 day to improve speed caching */
   header("Access-Control-Max-Age: 86400");

   /* Options request exits before the page is completely loaded */ 
   if (strtolower($_SERVER['REQUEST_METHOD']) == 'options') 
   
      exit();
   

   /* Response data */ 
   $arr = array("user_name" => "tizen", "phone_number" => "12312334234");   

   /* Response data returned in JSON format */
   echo json_encode($arr);
?>

更多关于 CORS 协议的信息请见here

【讨论】:

仍然得到相同的结果 Matheno 我添加了一个 URL,其中包含有关 CORS 协议的更多信息。我建议你读一下。 :)【参考方案2】:

尝试将此添加到您的.htaccess

Header set Access-Control-Allow-Origin "*"

当我遇到 PHPAngularjs 的相同问题时,这很有帮助..

【讨论】:

以上是关于AngularJS 应用程序与 XAMPP 本地主机上的 PHP 文件通信的主要内容,如果未能解决你的问题,请参考以下文章

如何正确引用本地主机上 PHP、CSS 等的子目录(在 xampp 中)中的文件?

使用代码点火器和 gmail smtp 从本地主机上的 xampp 发送电子邮件

.htaccess 无法使用 XAMPP 在本地主机上工作

无法连接到本地主机上的 XAMPP 服务器

xampp本地主机上的“连接不安全”错误

从 angularjs 调用 REST 服务时本地主机上的 CORS 问题