Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery ajax成功结果为空_Javascript_Jquery_Odata - Fatal编程技术网

Javascript jquery ajax成功结果为空

Javascript jquery ajax成功结果为空,javascript,jquery,odata,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=u

我正在使用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>");
    }
}
$(文档).ready(函数(){
$.ajax({
url:“http://apps.sungardhe.com/StudentResearch/public/Research.svc/Schools",
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:CBS学校
});
});
函数CBS学校(数据){
如果(数据==null){
警报(“数据为空”);
返回;
}
用于(数据中的var学校){
$(“#ddSchool”).append(“+data[school].ShortName+”);
}
}
使用fiddler,我看到响应实际上返回json数据,但由于某种原因,jquery结果对象为null。有人能告诉我为什么吗?

试试这个

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

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

您被阻止跨域XMLHttpRequests的阻止。由于您需要设置头来从.NETWeb服务获取JSON,因此您处于一个困难的位置,您不能从浏览器发出此类请求,而不能从其他域发出此类请求


Fiddler可能正在显示内容,但浏览器不会让页面看到它,出于安全原因,它将始终为空。解决这个问题的一种方法是,但不幸的是,这项服务似乎并不是为了支持它而设置的。

我相信你可以让你的电话变得通用(正如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,您会得到javascript错误“data is null”,无需自己处理,除了
.d
之外,这已经完成了。当获取JSON jQuery时,它已经检查了浏览器功能(如
JSON.parse()
),并检查了它的有效性等,请在这里亲自查看: