jquery, проблема с вызовом ajax с dataType является json - PullRequest
2 голосов
/ 08 апреля 2011

После обновления до jQuery 1.5.2 у меня начинаются проблемы с вызовами ajax при возврате данных json.

Ошибка (возвращаемая templateGet () ниже):

Ошибка вызова Ajax: [объект объекта] parsererror jQuery152040843801534161517_1302269320612 не был вызван

Здесьпример возврата json:

{"subject":"Test subject","body":"Test body"}

И вот функция jQuery

function ajax_templateGet(templateid) {
    showLoading();
    var query = '?action=get_template' + '&templateid=' + templateid;
    $.ajax({
        type: 'POST',
        url: 'script/ajax/mail_template/mail_template.ashx' + query,
        data: '',
        dataType: 'json',
        success: function(data) {
            $("#preview_subject").empty().html(data.subject);
            $("#preview_body").empty().html(data.body);
        },
        error: function(xhr, status, error) {
            $.jGrowl($.i18n._('Ajax call failed: ' + xhr + ' ' + status + " " + error), { header: $.i18n._('Ajax call failed!') });
        },
        complete: function(jqXHR, textStatus) {
            hideLoading();
        }
    });
}

Кто-нибудь может увидеть, что я делаю неправильно?

Ответы [ 3 ]

3 голосов
/ 08 апреля 2011

Вы используете плагин проверки? Если это так, убедитесь, что вы получили новую копию, совместимую с 1.5 - это известная проблема, которая также возникла у меня.

https://github.com/jzaefferer/jquery-validation

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

В jquery1.5.2.js найдите строку:

d.ajaxPrefilter("json jsonp", function (b, c, e)

и изменить на

d.ajaxPrefilter("jsonp", function (b, c, e)

Это работает, и все мои функции $ .ajax снова счастливы.


источник :: http://debeerdev.wordpress.com/2011/04/13/jquery-1-5-2-json/

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

Сначала необходимо проанализировать возвращенное значение JSON ....

Вы не можете сразу использовать data.subject

Сначала вам нужно загрузить json2.js файл и добавьте в ваше приложение ..

, затем проанализируйте переменную data

var response=eval("("+JSON.stringify(data)+")");

Затем используйте переменную response вместо data вкод вы отправили

success: function(data) {
            var response=eval("("+JSON.stringify(data)+")");
            $("#preview_subject").empty().html(response.subject);
            $("#preview_body").empty().html(response.body);
}
...