我正在尝试使用我的离子应用程序将发布数据发送到服务器脚本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="*"/>
答案 0 :(得分:1)
TypeError是一个红色鲱鱼,导致问题的真正错误是Access-Control-Allow-Origin问题。这指的是'*,*'服务器的错误配置,你不能复制相同的源,所以你必须更新你的配置(这取决于服务器的类型,例如nginx,apache,IIS等)。
接下来,了解原始政策的设置是个好主意。这就是说你允许访问你的服务器脚本,在这种情况下你试图加载两个不同的来源boardlineapp.com和192.168.0.11:8100这就是为什么我假设你首先启用*。对于您的开发服务器而言,这是一项很好的解决方案,其中安全性可能不是一个大问题,但您希望在生产中更加具体。
stackoverflow.com/q/19322973上的问题和答案详细介绍了此问题的安全隐患。