У меня есть сообщение для публикации, но мне не повезло, что мой код обработчика ответов .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 Ответ.
Пожалуйста, добавьте 'header ('Content-Type: application/json');' перед печатью ответ json – Mitul
Вы называете перекрестное происхождение? Это означает, что даже если сервер один и тот же, протокол и имя порта должны быть слишком – mplungjan
да, это перекрестное происхождение. Различные серверы. – EfficionDave