jquery ajax成功结果为null

时间:2010-07-27 20:01:42

标签: javascript jquery odata

我正在使用jquery进行ajax调用以获取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结果对象为null。谁能告诉我为什么?

3 个答案:

答案 0 :(得分:7)

您被阻止跨域XMLHttpRequests的same-origin policy阻止。由于您需要设置标头以从这样的.Net Web服务中获取JSON,因此您处于困境,您无法通过浏览器发出此类请求,而不是来自其他域。

Fiddler可能正在显示内容,但浏览器不会让页面看到它,出于安全考虑,它总是为空。解决这个问题的方法是JSONP,但不幸的是,它看起来并不像是设置了支持它的服务。

答案 1 :(得分:1)

我相信你可以使你的通话成为通用的(原因如marduk所示)

为了处理这个问题,并使调用通用(适用于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;
    },

编辑:如果它真的是空的而不是“未定义”那么跨域问题可能会在这里发挥作用。

答案 2 :(得分:0)

试试这个

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

由于返回数据类型为json,因此数据位于响应对象中的数据“d”变量中。