2015-06-13 1 views
-1

У меня есть сообщение для публикации, но мне не повезло, что мой код обработчика ответов .post работает. Я получаю несогласованные результаты в разных браузерах/инструментах, которые я пробовал. Вот почтовый индекс:jQuery .post работает, но запускает .fail без какой-либо информации.

$.post(form.attr("action"), form.serialize(), "json") 
    .done(function (response, textStatus, jqXHR) { 
     alert('done'); 
    }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
     // log the error to the console 
     alert('responsetext:' + jqXHR.responseText + ', status:' + textStatus + ', error:' + errorThrown); 
    }) 

В FireFox и Chrome всегда идет к .fail (несмотря на то, что данные успешно проводки), но только набор предметов textStatus к «ошибка». В Firefox, когда я пытаюсь просмотреть ответ, он просто показывает ошибку, «SyntaxError: JSON.parse: неожиданный конец данных в строке 1 столбец 1». В Chrome в консоли я вижу это: «XMLHttpRequest не может загрузить http://example.net/applicationsvc/formprocessor/index.php. Заголовок« Access-Control-Allow-Origin »присутствует на запрошенном ресурсе. Поэтому« http://example.net »« не разрешен ». Что кажется очень актуальным, но мои попытки его решить не сработали.

Как я могу разрешить проблему Access-Control-Allow-Origin в .post? Почему я не получаю никаких данных об ошибках и почему FireFox не может проанализировать ответ.

Использование Почтальон, и используя те же заголовки и тело, я вижу, что я получаю ответ:

{"successful":true,"thankyou_message":"<h2>Thank you!<\/h2><p>Thank you for signing up!<\/p>"} 

Но код не будет получать или обработки этого.

Вот заголовки запросов, которые идут из:

Host: example.net 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 
Accept: */* 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://example.net/mypage.htm 
Content-Length: 655 
Origin: http://example.net 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 

UPDATE: Я теперь перешли от .post к .ajax

$.ajax({ 
    url: form.attr("action"), 
    type: "POST", 
    data: form.serialize(), 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function() { 
     alert('done'); 
    } 
}); 

С этими словами я получаю последовательный HTTP 501 Ответ.

+0

Пожалуйста, добавьте 'header ('Content-Type: application/json');' перед печатью ответ json – Mitul

+0

Вы называете перекрестное происхождение? Это означает, что даже если сервер один и тот же, протокол и имя порта должны быть слишком – mplungjan

+0

да, это перекрестное происхождение. Различные серверы. – EfficionDave

ответ

0

Если вы используете междоменное попробуйте с JSONP instea

Ваш код

$.ajax({ 
    url: form.attr("action"), 
    method: "POST", 
    headers: {"Access-Control-Allow-Origin":"*"}, 
    data: form.serialize(), 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function() { 
     alert('done'); 
    } 
}); 

Изменить его

$.ajax({ 
    url: form.attr("action"), 
    type: "POST", 
    headers: {"Access-Control-Allow-Origin":"*"}, 
    data: form.serialize(), 
    dataType: "jsonp", 
    contentType: "application/json; charset=utf-8", 
    success: function() { 
     alert('done'); 
    } 
}); 
+0

. В вызове .Ajax я заменил .post, как указано в моем обновлении выше, я явно указал contentType: application/json, но это не помогло , – EfficionDave

+0

Не могли бы вы дать мне URL-адрес сайта, поэтому я проверю – Mitul

+0

@EfficionDave, если вы используете кросс-браузер, а затем попробуйте использовать JSONP вместо JSON – Mitul

0

попытка разрешить перекрестное происхождения на сервере, например в php

header("Access-Control-Allow-Origin: *"); 

сервер должен отправить это в заголовок ответа, по соображениям безопасности измените звезду в соответствии с вашим доменом.

+0

Я не могу ничего изменить на сервере. – EfficionDave

+0

Слишком плохо, возможно, они намеренно блокируют его, если нет, они должны разрешать сообщения из вашего домена. – vitr