JQuery - $ .ajax () - Перекрестное происхождение с использованием JSONP - Получение 'parsererror' только в IE 8 (работает в IE 7) - PullRequest
5 голосов
/ 17 ноября 2011

У меня есть следующий код для выполнения междоменного запроса и получения данных JSONP (JSON обернут методом обратного вызова).Я подтвердил, что получаю ответ правильно с помощью метода обратного вызова, обертывающего мои данные JSON.Он отлично работает в IE7 (обратный вызов cb вызывается), но не в IE8.

    $(document).ready(function () {
    var abc = $.ajax({
        type: "GET",
        url: "http://sd.domain.com/param1=a&param2=b&output=json&callback=cb",
        dataType: "jsonp",
        jsonp: false,
        cache: false,
        success: function (json) {

        },
        error: function (e) {

        }
    });

    abc.error(function (data, xhr, dat1) {

    });

    abc.complete(function (xhr, status) {
        var data = xhr.responseText;
    });
});

function cb(dd) {
    alert(dd.people[0].nameFirst);
}

Я получаю statusText как «Success» и StatusCode как 200 в xhr.Также я не могу найти любой правильно названный responseText для xhr.Так как же получить ответ в функции error / complete?Есть идеи?

1 Ответ

0 голосов
/ 13 ноября 2012

Jquery автоматически передает обратный вызов, например, callback=JQuery132123412415235, и сервер должен возвращать скрипт, вызывающий эту функцию, с данными JQuery132123412415235(data_returned), а остальное равно стандартному запросу json

Вы также используете свойства success и error и используете обещание и error(function (data) ) и complete(function (data)) только для ясного кода. Я думаю, что вы должны использовать только один метод. Код такой:

$(document).ready(function () {
    var abc = $.ajax({
        type: "GET",
        url: "http://sd.domain.com/param1=a&param2=b&output=json",
        dataType: "jsonp",
        jsonp: false,
        cache: false
    });

    abc.error(function (data, xhr, dat1) {

    });

    abc.complete(function (xhr, status) {
        var data = xhr.responseText;
    });

    abc.done(data){
       //alert(data.people[0].nameFirst); ?????        
    }

});

Помните, что сервер должен возвращать данные в форме callback_function (data), где data - это объект json, как если бы вы вернулись в стандартном вызове json.

...