jquery ajax帖子说Access-Control-Allow-Origin不允许使用xxx

Esw*_*ala 3 ajax jquery

我试图使用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));
    }
})
Run Code Online (Sandbox Code Playgroud)

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

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

alb*_*hrn 8

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

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

  • [工作实例](http://jsfiddle.net/sbPbL/3/).我所做的是我改为`dataType:'jsonp'`添加了`jsonp:'callbackname'.因为jQuery默认调用callback参数回调,但eBay期望它被称为'callbackname'.您需要做的是将参数添加到数据映射中.确保使用正确的参数名称,请查看[docs](http://developer.ebay.com/devzone/shopping/docs/Concepts/ShoppingAPI_FormatOverview.html#URLExamples)并使用URL方法而不是header方法.希望这可以帮助. (2认同)