JQuery AJAX результат успеха является нулевым - PullRequest
4 голосов
/ 28 июля 2010

Я делаю вызов ajax, используя jquery для получения данных в формате json. функция обратного вызова успешно вызывается, но данные пусты.

$(document).ready(function () {
    $.ajax({
        url: "http://apps.sungardhe.com/StudentResearch/public/Research.svc/Schools",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: cbSchools
    });
});

function cbSchools(data) {
    if (data == null) {
        alert("data is null");
        return;
    }
    for (var school in data) {
        $("#ddSchool").append("<option value='" + data[school].ShortName + "'>" + data[school].ShortName + "</option>");
    }
}

с использованием fiddler Я вижу, что ответ на самом деле возвращает данные json, но по какой-то причине объект результата jquery является нулевым. Кто-нибудь может сказать мне, почему?

Ответы [ 3 ]

7 голосов
/ 28 июля 2010

Вы заблокированы политикой того же происхождения , которая запрещает междоменные запросы XMLHttpRequest.Поскольку вам нужно установить заголовки для получения JSON от веб-службы .Net, подобной этой, вы оказались в затруднительном положении, вы просто не можете сделать такой запрос из браузера, а не из другого домена.

Fiddler может показывать контент, но браузер не позволит странице увидеть его, по соображениям безопасности он всегда будет нулевым.Одним из способов решения этой проблемы является JSONP , но, к сожалению, не похоже, что сервис настроен на его поддержку.

1 голос
/ 28 июля 2010

Полагаю, вы можете сделать свои звонки родовыми (причина, как указывает Мардук)

Чтобы справиться с этим и сделать общие вызовы (работает с data и data.d), я использую следующее в моих вызовах ajax (с моим материалом asp.net), чтобы он работал как с более старыми, так и с новыми сервисами:

   dataFilter: function(data)
    {
        var msg;
        if (typeof (JSON) !== 'undefined' &&
        typeof (JSON.parse) === 'function')
            msg = JSON.parse(data);
        else
            msg = eval('(' + data + ')');
        if (msg.hasOwnProperty('d'))
            return msg.d;
        else
            return msg;
    },

РЕДАКТИРОВАТЬ: ЕСЛИ это действительно ноль, а НЕ "неопределенный", то проблема междоменной области может быть здесь.

0 голосов
/ 28 июля 2010

попробуйте это

if (data.d == null) {
    alert("data.d is null");
    return;
}

, поскольку возвращаемый тип данных - json, данные находятся в данных, переменная "d" в объекте ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...