JQuery getJSON - ajax parseerror - PullRequest
15 голосов
/ 10 марта 2009

Я попытался проанализировать следующий ответ json с обоими JQuery getJSON и ajax:

[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}]

Я также пытался избежать экранирования символов "/" следующим образом:

[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview <\/h1><h1>January 29, 2009<\/h1>"}]

Когда я использую getJSON, он не выполняет обратный вызов. Итак, я попробовал это с JQuery AJAX следующим образом:

$.ajax({
    url: jURL,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function(x) {
        if(x && x.overrideMimeType) {
            x.overrideMimeType("application/j-son;charset=UTF-8");
        }
    },
    success: function(data){
        wId = data.iId;
        $("#txtHeading").val(data.heading);
        $("#txtBody").val(data.body);
        $("#add").slideUp("slow");
        $("#edit").slideDown("slow");
    },//success
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }
});

Ajax обнаруживает ошибку и предупреждает следующее:

XMLHttpRequest=[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview </h1><h1>January 29, 2009</h1>"}]

textStatus=parseerror

errorThrown=undefined

Затем я попробовал простой вызов get из JQuery, чтобы вернуть JSON, используя следующий код:

$.get(jURL,function(data){
    var json = eval("("+data+");");
    wId = json.iId;
    $("#txtHeading").val(json.heading);
    $("#txtBody").val(json.body);
    $("#add").slideUp("slow");
    $("#edit").slideDown("slow");
})

.get возвращает JSON, но eval выдает ошибки независимо от того, как я изменил JSON (заголовок типа содержимого, другие варианты формата и т. Д.)

Я пришел к выводу, что, похоже, существует проблема с возвратом HTML-кода в JSON и его анализом. Однако у меня есть надежда, что я, возможно, пропустил что-то, что позволило бы мне получить эти данные через JSON. У кого-нибудь есть идеи?

Ответы [ 17 ]

0 голосов
/ 21 декабря 2011

в моем случае ошибка была вызвана тегом html в json.

НЕПРАВИЛЬНО (parsererror)

{"msg": "Gracias,< br >Nos pondremos en contacto."}

ПРАВИЛЬНО

{"msg": "Gracias, nos pondremos en contacto."}

Браузер: IE7 / IE8

0 голосов
/ 10 мая 2011

Возможно, потому что ваш выходной буфер не пустой, поэтому AJAX получает байты, которые не принадлежат JSON.

Попробуйте очистить буфер с помощью ob_clean() на стороне сервера непосредственно перед выводом json с помощью echo или die(). И вам не нужно указывать contentType, я думаю, что для вас значение по умолчанию будет работать правильно.

У меня была такая же проблема, и она решает ее.

Надеюсь вам помочь.

0 голосов
/ 22 декабря 2010

Вчера на $. В Ajax все еще нет ошибок, сегодня цитируется ошибка, некоторые говорят, что parsererror jquery версия проблемы, что я использую, это jquery-1.3.2.min.js, вчера. Это издание тоже сделано, сегодня вымыто. Источники данных: без изменений. Не знаю, по какой причине?

0 голосов
/ 24 мая 2010

Я получил похожую ошибку. Мне потребовалось некоторое время, чтобы выяснить - мало ли я знал, что PHP (изначально) не поддерживает JSON с PHP5.2. Критическое напоминание ...

0 голосов
/ 10 марта 2009

Во-первых, попробуйте точно определить, связана ли проблема с общим кодированием / декодированием JSON. попробуйте более простые объекты, с числами и простыми строками, а затем с цитируемым HTML.

После того, как вы запустите JSON, вам действительно стоит подумать об удалении оттуда HTML. Гораздо лучше перенести только данные и оставить детали презентации в шаблонах. При использовании AJAX это означает скрытый шаблон в HTML и использование jQuery для его репликации и заполнения данными. проверьте любой из плагинов шаблонов jQuery . Из них jTemplates является наиболее популярным.

0 голосов
/ 10 марта 2009

Значение, которое вы пытаетесь проанализировать, заключено в квадратные скобки [], что означает, что это массив. Вы пытаетесь оценить массив. Попробуйте вычислить первый элемент массива, и он должен работать ...

var json = eval("("+data[0]+");");

Кроме того, я бы рекомендовал использовать JSON.parse (), предоставленный здесь вместо прямого вызова eval ().

0 голосов
/ 10 марта 2009

Я думаю, что вы задаете неправильный вопрос. Использовать $ .getJSON () гораздо проще, и если у вас возникли проблемы, лучше запросить $ .getJSON (), чем $ .ajax (). Также вам может пригодиться просмотр исходного кода функции getJSON, потому что я вижу, что вы получили много бесполезных вещей с mimeTypes. Это не так.

...