jquery ajax成功结果为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("" + data[school].ShortName + ""); } } 

使用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”中是变量。