2012-08-02 84 views
1

请考虑下面的代码片段:回调 - Parseerror JSONP通过jQuery AJAX

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

请帮我诊断我错过了什么 - 谢谢!

+0

[jQuery JSON响应总是触发一个ParseError]的可能重复(http://stackoverflow.com/questions/5095307/jquery-json-response-always-triggers-a-parseerror) – Bergi 2012-08-03 15:08:10

回答

4
var data = $.parseJSON(data); 

既然你正在做一个JSONP请求,你将得到一个传入回调函数的对象字面值。你不能使用parseJSON。无论如何,如果内容类型是已知的,jQuery是智能的,并且总是为你解析。

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


行,that的简单。看看script it loads:那不是valid JSONP - 它错过了回调填充。另外,mime类型是错误的:对于JSONP脚本,它应该是​​3210,因为它们提供的JSON应该是application/json

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

你确定webservice完全支持JSONP吗?

+0

是的,对不起,这是遗留的从以前的问题。我已删除并仍然收到相同的错误。这里是我用jsFiddle http://jsfiddle.net/ALeez/2/ – McKev 2012-08-03 15:18:01

+0

Bergi是对的,http://mosaicco.force.com/siteforce/activeretailaccounts?callback=jQuery17204995805434882641_1344010639385&_=1344010639389 不会产生有效的JSONP;它应该看起来像包装在函数调用中的json数据。如果他们确实支持JSONP,那么回调的查询字符串参数可能不同。 – JayC 2012-08-03 16:20:24

+0

支持JSON - 将此标记为解决方案,因为它是根据指示调整回调的问题。 – McKev 2012-10-26 16:42:59