Jquery 1.5 ломает старые звонки 1.4 $ .get - PullRequest
0 голосов
/ 12 апреля 2011

Я недавно обновился до 1,5, и функции вроде:

function showData(id) {

 $.get("/url/getdata", {id : id}, function(data) {
 $("#dialogData").html(data);
 $("#dialogData").dialog({width: 500, modal: true, zIndex:22000});
 }, "json");
}

больше не работают с добавлением 1,5.

Глядя на firebug, возвращаются правильные данные, но функцияперерывы после ввода обратного вызова.Все просто останавливается.

Как я могу это исправить?Я читал об изменениях в вызове Ajax в версии 1.5, но у меня есть более тысячи таких вызовов через мой проект -> Я даже не могу думать о том, чтобы отыскать их все и изменить, не говоря уже об их тестировании.

Редактировать: как ни странно, если для dataType я вместо текста "json" добавлю "текст json", это сработает.Я не думаю, что нужно пройти весь мой код и изменить это жизнеспособный вариант ...

Редактировать 2: Вместо того, чтобы возвращать json_encode ($ string), я попытался вернуть json_encode (array ("string" =>$ string)), а затем я сделал $ (element) .html (data.string).Это также не сработало, и данные JSON, полученные с помощью этого вызова, были действительны на jsonlint.com

Редактировать 3: Попытка установки заголовков перед выводом json_encode не работала.До сих пор единственным решением было установить тип данных для текста json.

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Данные используются с помощью функции html(), но ожидаются данные JSON.Посмотрите на тип MIME, который возвращается, и действительно ли вы ожидаете, что данные будут анализироваться JSON.

0 голосов
/ 13 апреля 2011

Я получил виновника.Это был queue.js, расширение ajax, которое позволяло ставить в очередь и прерывать вызовы ajax.Это расширило ajax в jquery, так что ajax в конечном итоге сломался.Теперь, чтобы найти способ восстановить совместимость, и у меня все хорошо.

Спасибо за усилия всех!

0 голосов
/ 12 апреля 2011

Похоже, вам нужно установить заголовок Content-Type на стороне сервера.PHP может легко это сделать, просто позвоните header('Content-Type: application/json'); как-то перед тем, как начать вывод закодированных данных JSON.

jQuery увидит этот заголовок и автоматически проанализирует ваш JSON.Я предполагаю, что в версии с версией никогда, вероятно, она более строгая с dataType.Если он попытался проанализировать его как HTML (поскольку PHP отправляет Content-Type: text/html по умолчанию), он, вероятно, выдаст ошибку.

Как только вы получите данные JSON, вы можете создать свой HTML для использования с html().

...