JQuery — PHP JSON в AJAX не анализируется — JSON отформатирован правильно

Я недавно начал переводить старый Classic ASP сайт для PHP, Несколько его страниц (Response.ContentType = "application/json") будет просто служить JSON ответы, такие как {"R":1} и все работало нормально.

теперь на PHP, с header("content-type:application/json") Первым делом в коде ajax просто не будет его анализировать. Код JS на стороне клиента тот же, что я использовал ранее. Я даже не коснулся этого.

$.ajax({
dataType: "json",
type : "POST",
url: "processthisrequest.php",
cache: false,
async: false,
data: { Field1:"bla", Field2:"blabla"},
error: function(data){
// code on error
},
success: function(json){
// code on success
}
});

если запрос принят ВСЕ, он обслуживает {"R":1} с двойными кавычками, как это всегда было.

Ajax запустит функцию ошибки, несмотря ни на что. пытаясь отладить его, я нашел это:

readyState:4
responseText:{"R":1}
status:200
statusText:OK

В поисках помощи я обнаружил, что многие люди, имеющие проблемы с ajax, получают готовое состояние: 4, статус: 200 и ответ по-прежнему не обрабатывается. Ни одно из решений не сработало и не применимо к моей проблеме.

как это было с IIS / ASP, может ли это быть что-то с Apache или PHP?

ОБНОВИТЬ:
все еще безуспешно, но если я получу сервер для обслуживания .JS файл с {"R":1} вместо обработки ответа через php-страницу ajax запустит функцию успеха. что только подтверждает мою точку зрения, что это проблема php, а также объясняет, почему он работал со старым ASP для динозавров. теперь, почему PHP не предоставляет правильный тип MIME, я пытаюсь выяснить.

0

Решение

Я разобрал это.

У PHP есть очень странные способы ведения дел.
сразу после header("Content-Type: application/json") линия у меня есть include "file.php", хотя и файл, который обрабатывает запрос Ajax, и файл включения были сохранены как Unicode один имел BOM подписи а другой не было.

обработка этих двух файлов заставила PHP отправлять «что-то» обратно в браузер, что было не совсем правильным application/json ответ, который не позволил бы Ajax разобрать его.

Я знаю, что должен остаться здесь, но я так расстроен, что мне нужно добавить этот комментарий: потратив на это почти 18 часов своей жизни, время, которое я мог бы потратить на другие вещи, единственное, чему я могу научиться Исходя из этого опыта, бесплатное программное обеспечение вовсе не является бесплатным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector