Я недавно начал переводить старый 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, я пытаюсь выяснить.
Я разобрал это.
У PHP есть очень странные способы ведения дел.
сразу после header("Content-Type: application/json")
линия у меня есть include "file.php"
, хотя и файл, который обрабатывает запрос Ajax, и файл включения были сохранены как Unicode один имел BOM
подписи а другой не было.
обработка этих двух файлов заставила PHP отправлять «что-то» обратно в браузер, что было не совсем правильным application/json
ответ, который не позволил бы Ajax разобрать его.
Я знаю, что должен остаться здесь, но я так расстроен, что мне нужно добавить этот комментарий: потратив на это почти 18 часов своей жизни, время, которое я мог бы потратить на другие вещи, единственное, чему я могу научиться Исходя из этого опыта, бесплатное программное обеспечение вовсе не является бесплатным.
Других решений пока нет …