Я пытаюсь отправить данные сообщения на серверный скрипт mail.php
с моим ионным приложением. Но аргумент «данных» в функции handleError
: null
...угловой пост http, данные об ошибке 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:[email protected]/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="*"/>
На самом деле похоже, что это проблема безопасности на основе перекрестного сайта (CORS), попробуйте настроить сервер для правильных заголовков CORS, поскольку это должно исправить это или, по крайней мере, раскрыть следующую проблему. –
@PaulRyan Я удалил эту строку 'header (« Access-Control-Allow-Origin: * »);' в mail.php, похоже, сейчас работает. Не могли бы вы объяснить мне, как «настроить мой сервер для правильного CORS», потому что я не знаю, как это сделать. Извините, я новичок в этом. – Louis
Рад, что это сработало, нужно иметь в виду, что вы разрешаете или запрещаете сценарии из нескольких источников (boardlineapp.com и 192.168.0.11:8100) для доступа к содержимому на сервере. По умолчанию это запрещено. Включив CORS для * вашего высказывания, вы не заботитесь об этом аспекте безопасности. Это нормально для разработчиков, но, вероятно, не для производства. Вам нужно будет изучить специфику вашего сервера для правильной настройки (например, apache, nginx, IIS и т. Д.). Достойный ответ на последствия на http://stackoverflow.com/q/19322973. –