回调 - 通过jQuery AJAX进行Parseerror JSONP

时间:2012-08-02 21:49:58

标签: javascript jquery ajax callback jsonp

请考虑以下代码段:

$(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

请帮我诊断我错过的东西 - 谢谢!

1 个答案:

答案 0 :(得分:4)

var data = $.parseJSON(data);

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

不确定是否会触发错误消息,但问题jQuery JSON response always triggers a ParseError这是解决方案。


好的,that很简单。查看script it loads:这不是valid JSONP - 它错过了回调填充。此外,mime类型是错误的:对于JSONP脚本,它应该是text/javascript or application/javascript,对于他们提供的JSON,它应该是application/json

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

你确定web服务完全支持JSONP吗?