我正在开发一个页面,通过jQuery的AJAX支持从Flickr和Panoramio中提取图像.
Flickr端工作正常,但当我尝试$.get(url, callback)
从Panoramio时,我在Chrome的控制台中看到一个错误:
XMLHttpRequest无法加载http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150.Access-Control-Allow-Origin不允许使用null.
如果我直接从浏览器查询该URL,它可以正常工作.发生了什么,我可以解决这个问题吗?我是不是错误地编写了我的查询,或者这是因为Panoramio会妨碍我正在尝试做的事情?
Google没有在错误消息上显示任何有用的匹配项.
编辑
以下是一些显示问题的示例代码:
$().ready(function () {
var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=processImages&minx=-30&miny=0&maxx=0&maxy=150';
$.get(url, function (jsonp) {
var processImages = function (data) {
alert('ok');
};
eval(jsonp);
});
});
Run Code Online (Sandbox Code Playgroud)
您可以在线运行该示例.
编辑2
感谢Darin对此的帮助. 上面的代码错了. 请改用:
$().ready(function () {
var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&minx=-30&miny=0&maxx=0&maxy=150&callback=?';
$.get(url, function (data) {
// can use 'data' in here...
});
});
Run Code Online (Sandbox Code Playgroud) 我想制作一个关于HTML/JS 同源政策的社区维基,希望能帮助任何人搜索这个主题.这是SO上搜索次数最多的主题之一,没有统一的wiki,所以我去:)
相同的源策略可防止从一个源加载的文档或脚本从另一个源获取或设置文档的属性.此政策可以追溯到Netscape Navigator 2.0.
请保持示例详细,最好还链接您的来源.
我正在编写一个HTML5应用程序,它使用JSONP从几个不同的来源收集数据.我正在使用GET做的任何事情都能很好地完成.我现在正试图发布数据,我遇到了一个有趣的障碍.我需要将数据从我的应用程序POST到另一个应用程序从本地计算机运行.我正在尝试编写一个支持跨平台的移动应用程序(想想Pulse/Flipboard),因此代码将始终从本地源运行.我的思考过程如下:
file://
,因此原始头为空.这会导致请求失败(XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用Origin null)我所针对的所有浏览器都是基于webkit的(iPad,Playbook,Android),所以我想知道我可以偷偷摸摸的相同原始政策代码中是否有任何吱吱声?也许是使用iframe或postMessage的东西?
在处理CORS时,我看到有人在角度中使用$ http.defaults.useXDomain = true.真的有必要这样做吗?
我只是在不同的域中设置了laravel和angular(通过不同的域,我的意思是我将angular and laravel放在localhost www文件夹中的完全分离的文件夹中.仅供参考我使用nginx).我用棱镜的http请求击中了laravel控制器.它工作正常,我是否使用$ http.defaults.useXDomain.
幸运的是,这种情况使我的工作变得更容易一些.但我仍然想知道为什么会发生这种情况有什么解释?
看起来像这么简单的问题,但我找不到答案,所以让我相信也许我没有控制旗帜!?
语境:
我正在开发一个SignalR中心和客户端.如果(在信号器站点上)我在配置中设置以下内容,则一切正常:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://example.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
问题是我想在这里使用通配符.
当我这样做(即value="*"
)时,我得到以下错误(在客户端上):
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true.
Run Code Online (Sandbox Code Playgroud)
我可能会在这里遗漏一些简单的东西,但我找不到允许我设置凭证标志的相关配置条目.
我试过的
<add name="Access-Control-Allow-Credentials" value="false"/>
Run Code Online (Sandbox Code Playgroud)
似乎没有什么区别(同样的错误).
我正在使用zapworks studio来开发AR体验.它使用Z.ajax进行ajax调用.我发出GET请求和POST请求.我也使用smileupps来托管couchdb(他们有免费托管).这是CORS配置:
凭证:false; 标题:接受,授权,内容类型,来源; 方法:GET,POST,PUT,DELETE,OPTIONS,HEAD; 起源:*
在Windows上启动ZapWorks Studio时,一切正常.但是,当用Android设备扫描zapcode时,post ajax调用失败.只有帖子.我正在使用基本身份验证.我强制说只有管理员可以在couchdb上管理数据库.我可以通过Web浏览器从桌面和手机访问主机,手动完成所有操作.
我尽我所能来解决问题:删除身份验证,更改CORS配置......没有任何作用.我认为这是一个CORS的问题,但一切正常,在Windows和移动设备上只是POST失败...我一直得到状态代码为0.
编辑 - 新信息,apitester测试也适用于桌面和移动.
编辑 - 在我的手机上尝试使用REST Api Client,它也运行良好.这只能是一个CORS问题或zapworks的问题.很奇怪,它适用于Windows,但不适用于手机.
编辑 - 我发现了问题所在,但没有找到解决方法.所以我设置了一个代理来调试zapworks studio在本教程之后发出的请求.它似乎做了预检请求,但得到了回应
"HTTP/1.1 405方法不允许"
即使有效载荷是
{"error":"method_not_allowed","reason":"仅允许DELETE,GET,HEAD,POST"}.
这是请求:
OPTIONS /ranking HTTP/1.1
Host: somehost.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: null
User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; SM-G950U1 Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36
Access-Control-Request-Headers: authorization,content-type,x-requested-with
Accept: */*
Accept-Encoding: …
Run Code Online (Sandbox Code Playgroud) ajax ×4
javascript ×4
cors ×3
jsonp ×2
android ×1
angularjs ×1
couchdb ×1
cross-domain ×1
html5 ×1
jquery ×1
json ×1
laravel ×1
signalr ×1
web-config ×1