jquery ajaxpost说Access-Control-Allow-Origin不允许使用xxx

我试图使用AJAX( post请求)调用eBay FindProducts API,但是遇到了以下错误:

XMLHttpRequest无法加载http://open.api.ebay.com/shopping?callname=FindProducts 。 Access-Control-Allow-Origin不允许来源http://localhost.com/test.php 。

我的代码:

 $.ajax ({ type: "POST", url: 'http://open.api.ebay.com/shopping?callname=FindProducts', dataType: ($.browser.msie) ? "text" : "xml", contentType: 'application/x-javascript', crossDomain : true, data: { 'X-EBAY-API-APP-ID' : 'ebayAppId', 'X-EBAY-API-VERSION': '771', 'X-EBAY-API-SITEID': '0', 'X-EBAY-API-REQUEST-ENCODING': 'NV', 'X-EBAY-API-RESPONSE-ENCODING': 'json', 'QueryKeywords' : '753759971632', 'MaxEntries' : '3' }, success: function (result) { alert('success'); alert(result); }, error: function (data) { alert((data)); } }) 

我怎样才能解决这个错误。

我尝试设置dataType : jsonp (我知道正在检索XML,但要解决错误我将其设置为jsonP)。 它工作正常,但jQuery无法解析XML,因为json响应是预期的。

如果您将&responseencoding=JSON添加到您的URL,您将根据文档获得响应为JSON

更新 工作示例 。 我所做的是我改为dataType:'jsonp'添加了jsonp:'callbackname' 。 因为jQuery默认调用callback参数callback ,但eBay期望它被称为callbackname 。 您需要做的是将参数添加到数据映射中。 确保使用正确的参数名称,检查文档并使用URL方法而不是header方法。 希望这可以帮助。

如果您阅读了jQuery.ajax()文档,则可以使用jsonp并且仍然可以使用不同的返回类型进行解析。

多个空格分隔值:从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的数据转换为您需要的数据类型。 例如,如果要将文本响应视为XML,请对dataType使用“text xml”。 您还可以发出JSONP请求,将其作为文本接收,并由jQuery解释为XML:“jsonp text xml”。 类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,如果失败,则从jsonp转换为text,然后从text转换为xml。

所以你基本上所要做的就是将你的dataType代码行改为:

 dataType: ($.browser.msie) ? "jsonp text xml" : "xml", 

或者,您可以在URL中添加&responseencoding=JSON参数,如另一个答案中所述 。

我终于通过做两件事来完成工作,感谢Albin。

我改为dataType:’jsonp’添加了jsonp:’callbackname’。 因为jQuery默认调用callback参数回调,但eBay期望它被称为’callbackname’。 由于与eBay的CRO问题,XML无法正常工作(但需要确认。)

使用chrome控制台调试retreived对象,使用JSON.Stringify()将字符串converetd为字符串。

希望这有助于某人!

干杯,拉杰什