繁体   English   中英

jquery ajax成功结果为null

[英]jquery ajax success result is null

我正在使用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。 谁能告诉我为什么?

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

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

我相信你可以让你的通话变得通用(原因如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;
    },

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

试试这个

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM