Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jqueryajax帖子说访问控制不允许xxx允许来源_Jquery_Ajax - Fatal编程技术网

jqueryajax帖子说访问控制不允许xxx允许来源

jqueryajax帖子说访问控制不允许xxx允许来源,jquery,ajax,Jquery,Ajax,我试图使用AJAX(postrequest)调用eBay FindProducts API,但遇到以下错误: 无法加载XMLHttpRequest。访问控制不允许原点允许原点 我的代码: $.ajax ({ type: "POST", url: 'http://open.api.ebay.com/shopping?callname=FindProducts', dataType: ($.browser.msie) ? "text" : "xml", content

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

无法加载XMLHttpRequest。访问控制不允许原点允许原点

我的代码:

$.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));
    }
})
我怎样才能克服这个错误呢


我尝试设置
数据类型:jsonp
(我知道正在检索XML,但为了解决这个错误,我将它设置为jsonp)。它可以工作,但jQuery无法解析XML,因为预期会有json响应。

如果将
&responseencoding=json
添加到URL中,您将根据

更新 . 我所做的是更改为
dataType:'jsonp'
添加了
jsonp:'callbackname'
。因为jQuery在默认情况下调用回调参数
callback
,但是eBay希望调用它
callbackname
。您需要做的是将参数添加到数据映射中。确保使用正确的参数名称,检查文档并使用URL方法而不是header方法。希望这对您有所帮助。

如果您阅读了文档,您可以使用jsonp,但仍然需要解析不同的返回类型

多个空格分隔的值:从jQuery1.5开始,jQuery可以将一个数据类型从内容类型头中接收的数据类型转换为您需要的数据类型。例如,如果希望将文本响应视为XML,请使用“文本XML”作为数据类型。您还可以发出JSONP请求,将其作为文本接收,并由jQuery将其解释为XML:“JSONP文本XML”。类似地,“JSONP XML”等速记字符串将首先尝试从JSONP转换为XML,如果失败,则从JSONP转换为文本,然后从文本转换为XML

因此,基本上您只需将
数据类型
行代码更改为:

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

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

多亏了Albin,我终于通过做两件事让它工作了

我改为数据类型:“jsonp”添加了jsonp:“callbackname”。因为jQuery默认调用回调参数callback,但eBay希望它被称为“callbackname”。由于易趣的CRO问题,XML无法工作(但需要确认。)

使用chrome控制台调试使用JSON.Stringify()检索、转换为字符串的对象

希望这对别人有帮助

干杯,
Rajesh

“我试着设置数据类型:jsonP”-它不起作用,因为jsonP不是XML,反之亦然。尝试检查ebay是否支持XML,以便您可以读取XML。您可能必须在服务器端执行此操作。您可以对服务器进行ajax调用,传递页面中所需的任何信息。然后,使用类似curl的东西在php中访问api。嗨,joseph,谢谢你的回复。我知道json不是xml,反之亦然(在我尝试设置dataType:jsonP之后,请参阅我在()中的帖子)。如果eBay不支持CORS,有没有办法做到这一点?即使将数据类型设置为jsonp或script(我从浏览器控制台看到xml正在被检索,但jquery无法解析),也有办法检索xml吗?lbstr-thansk对于您的回复,我知道使用curl/php:)实现这一点的方法。我想检查一下这是否可以在客户端完成。albin的解决方案可以解决这个问题,但是,您希望您的appid向公众开放吗?appid公开是可以的,但我不知道为什么jquery无法解析响应,ajax返回一个错误!谢谢你的回答。医生看起来很有希望,但似乎不起作用。此外,我还将responseencoding附加到我的url中的Json中,即dint work。但是,当我尝试使用数据类型时,出现了一个错误:“jsonp text xml”资源被解释为脚本,但使用MIME类型text/plain:{.}传输。删除contentType选项,似乎是把事情搞砸了。(为什么设置为application/x-javascript?)对不起,我删除了内容类型,正在测试一些东西。然而,删除内容类型似乎没有什么帮助。这只是一个警告,而不是一个错误。它不应该破坏你的密码。(警告是因为服务器没有使用正确的MIME类型进行响应,但这不太重要。)无论如何,最好按照中的说明以JSON形式接收数据。(我展示的技巧,实际上是一种黑客/变通方法,可以满足你的需要。)我认为它不起作用,因为如果你看到我的ajax调用,我已经发送了X-EBAY-API-RESPONSE-ENCODING':“json”,有趣的是,我看到了请求和响应头/参数,我能够返回json响应,但仍然存在错误:资源被解释为脚本,但使用MIME类型text/plain传输:是的,我刚才看到了。但是,无论您如何将其作为参数传递,如果您尝试将其作为标头传递,并且当我尝试时,我发现它在中是区分大小写的,他们正在使用JSON。。我所做的是更改为
dataType:'jsonp'
添加了
jsonp:'callbackname'
。因为jQuery默认调用回调参数callback,但eBay希望它被称为“callbackname”。您需要做的是将参数添加到数据映射中。确保使用正确的参数名称,检查并使用URL方法而不是header方法。阿尔宾:非常感谢,我成功了。谢谢你的例子。我希望response.responseText保存该对象,但response itelf是来自eBay的响应JSON。我可以通过执行$(“#eBayXMLResponse”).val(JSON.stringify(object,null,4))将其打印到文本区;stringify是将JSON obj转换为字符串的好方法。和其他参数用于使用“4”缩进进行格式设置。小结:谢谢Rajesh