代码之家  ›  专栏  ›  技术社区  ›  Rush Frisby

jquery ajax成功结果为空

  •  4
  • Rush Frisby  · 技术社区  · 14 年前

    我正在使用jquery进行ajax调用,以获取json格式的数据。调用了success回调函数,但数据为空。

    $(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 result对象为null。有人能告诉我为什么吗?

    3 回复  |  直到 14 年前
        1
  •  8
  •   Nick Craver    14 年前

    你被警察挡住了 same-origin policy 防止跨域XMLHttpRequests。因为您需要设置头来从这样的.NETWeb服务中获取JSON,所以您处于一个困难的位置,您不能从浏览器而不是其他域发出这种请求。

    JSONP ,但不幸的是,该服务似乎不支持它。

        2
  •  1
  •   Mark Schultheiss    14 年前

    我相信你可以让你的电话通用(如马杜克指出的原因)

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

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

        3
  •  0
  •   gehsekky    14 年前

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