angular http post,错误数据为null

时间:2015-11-26 16:44:25

标签: php angularjs

我正在尝试使用我的离子应用程序将发布数据发送到服务器脚本mail.php。 但是数据'函数handleError中的参数是null ...

你可以帮我解决这个问题吗?

可以是内容安全协议问题吗? 因为我不知道在这里使用什么... 我需要与boardlineapp.com沟通并使用FB和Google Single Sign In。

controllers.js:

  sendToServer.f(data).success(handleSuccess).error(handleError);
  function handleSuccess(data , textStatus, jqXHR ) {
      console.log("Message successfully sent");
      $("#mypanel").panel( "close" );
  }
  function handleError(data , textStatus, jqXHR  ) {
      console.log("Error when sending the message : ");
      console.log(data);
      console.log(data.response);
      console.log(textStatus);
      console.log(jqXHR);
      alert("The message could not be sent. Sorry for the inconvenience.");
  };

services.js:

.service('sendToServer', function sendToServerFactory($http) {  
    this.f = function(dataToSend) {
        return $http({
            url: 'http://id:password@boardlineapp.com/app/mail.php',
            method: "POST",
            data: dataToSend
        });
    }
})

mail.php:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: *");
if($_POST) {
    $userEmail=$_POST['userEmail'];
    $subject=$_POST['subject'];
    $destEmail=$_POST['destEmail'];
    $body=$_POST['body'];

    mail($destEmail, $subject, $body, "From:" . $userEmail);
#this bit doesn't work
#   $response = mail($destEmail, $subject, $body, "From:" . $userEmail);
#   echo $response;
#   exit();
}
?>

控制台错误:

error    TypeError: Cannot read property 'response' of null
    at handleError (http://192.168.0.11:8100/js/services.js:201:27)


XMLHttpRequest cannot load http://boardlineapp.com/app/mail.php.
Response to preflight request doesn't pass access control check: The 
'Access-Control-Allow-Origin' header contains multiple values '*, *', 
but only one is allowed. Origin 'http://192.168.0.11:8100' is 
therefore not allowed access.

config.xml中:

<access origin="*"/>
<allow-navigation href="*"/>
<allow-intent href="*"/>

1 个答案:

答案 0 :(得分:1)

TypeError是一个红色鲱鱼,导致问题的真正错误是Access-Control-Allow-Origin问题。这指的是'*,*'服务器的错误配置,你不能复制相同的源,所以你必须更新你的配置(这取决于服务器的类型,例如nginx,apache,IIS等)。

接下来,了解原始政策的设置是个好主意。这就是说你允许访问你的服务器脚本,在这种情况下你试图加载两个不同的来源boardlineapp.com和192.168.0.11:8100这就是为什么我假设你首先启用*。对于您的开发服务器而言,这是一项很好的解决方案,其中安全性可能不是一个大问题,但您希望在生产中更加具体。

stackoverflow.com/q/19322973上的问题和答案详细介绍了此问题的安全隐患。