1

请考虑以下代码片段:

$(function () {
     $.ajax({
        type: "GET",
        url: "http://mosaicco.force.com/siteforce/activeretailaccounts",
        dataType: "jsonp",
        crossDomain: true,
        jsonp: "callback",
        error: function(jqXHR, textStatus, errorThrown) {   
            alert('Error Message: '+textStatus);
            alert('HTTP Error: '+errorThrown);
            },
        success: function (data) {
                var i = 0;
                       //Process JSON
                       $.each(data, function () {
                             var name = this.locname;
                             var lat = this.lat;
                             var lng = this.lng;
                             var address = this.address;
                             var address2 = this.address2;
                             var city = this.city;
                             var state = this.state;
                             var postal = this.postal;
                             var phone = this.phone;
                             var web = this.web;
                             web = web.replace("http://", "");

                             var distance = GeoCodeCalc.CalcDistance(orig_lat, orig_lng, lat, lng, GeoCodeCalc.EarthRadiusInMiles);

                             //Create the array
                             locationset[i] = new Array(distance, name, lat, lng, address, address2, city, state, postal, phone, web);

                             i++;
                      });
                  }
        });
 });​

我正在拉 JSON 跨域,由于某种原因,我不断收到 parseerror 返回:

HTTP Error:Error: jQuery17209875996995251626_1343943259805 was not called

我可以在页面上很好地看到数据 - 回调看起来像这样:

callback:jQuery17209875996995251626_1343943259805_:1343943260015

请帮助我诊断我所缺少的 - 谢谢!

4

1 回答 1

4
var data = $.parseJSON(data);

由于您正在执行 JSONP 请求,因此您将获得一个传递给回调函数的对象文字。你不能用parseJSON那个。无论如何,jQuery 是智能的,如果内容类型已知,它总是会为您解析。

不确定这是否会触发错误消息,但对于jQuery JSON 响应总是触发 ParseError的问题,这是解决方案。


好的,很简单。查看它加载的脚本: 这不是有效的 JSONP - 它错过了回调填充。此外,mime-type 是错误的:对于 JSONP 脚本,它应该是text/javascriptapplication/javascript,对于他们提供的 JSON,它应该是application/json.

jQuery 确实检测到“脚本”的负载,但由于没有执行任何操作,它会抛出“尽管文件已成功加载,但未调用给定回调”的错误 - 怀疑是 parseerror。

您确定网络服务完全支持 JSONP 吗?

于 2012-08-03T15:12:11.253 回答