2015-11-26 3 views
1

Я пытаюсь отправить данные сообщения на серверный скрипт 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="*"/> 
+0

На самом деле похоже, что это проблема безопасности на основе перекрестного сайта (CORS), попробуйте настроить сервер для правильных заголовков CORS, поскольку это должно исправить это или, по крайней мере, раскрыть следующую проблему. –

+0

@PaulRyan Я удалил эту строку 'header (« Access-Control-Allow-Origin: * »);' в mail.php, похоже, сейчас работает. Не могли бы вы объяснить мне, как «настроить мой сервер для правильного CORS», потому что я не знаю, как это сделать. Извините, я новичок в этом. – Louis

+0

Рад, что это сработало, нужно иметь в виду, что вы разрешаете или запрещаете сценарии из нескольких источников (boardlineapp.com и 192.168.0.11:8100) для доступа к содержимому на сервере. По умолчанию это запрещено. Включив CORS для * вашего высказывания, вы не заботитесь об этом аспекте безопасности. Это нормально для разработчиков, но, вероятно, не для производства. Вам нужно будет изучить специфику вашего сервера для правильной настройки (например, apache, nginx, IIS и т. Д.). Достойный ответ на последствия на http://stackoverflow.com/q/19322973. –

ответ

1

TypeError является красно-селедка в этом реальной ошибки, которая вызывает проблему для вас является вопрос Access-Control-Allow-Origin. Это указывает на неправильную конфигурацию для сервера «*, *», вы не можете дублировать одно и то же происхождение, поэтому вам придется обновлять конфигурацию (это зависит от типа сервера, например, nginx, apache, IIS , и т.д).

Далее следует понять, что делает настройка политики происхождения. Это говорит о том, где вы разрешаете доступ к вашему серверному скрипту, в этом случае вы пытаетесь загрузить два разных источника boardlineapp.com и 192.168.0.11:8100, поэтому я предполагаю, что вы включили * в первую очередь. Это отличная работа для вашего сервера разработки, где безопасность может не быть большой проблемой, но вы хотите быть более конкретным в производстве.

Вопрос и ответы на stackoverflow.com/q/19322973 подробно описывают последствия этой проблемы для безопасности.

Смежные вопросы