我正在开发一个页面,该页面通过jQuery的AJAX支持从Flickr和Panoramio中提取图像。

Flickr方面运行良好,但是当我尝试从Panoramio进行$.get(url, callback)时,我在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不允许使用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);});
});

您可以在线运行示例 。

编辑2

感谢达林在这方面的帮助。 上面的代码错误。 使用此代替:

$().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...});
});

#1楼

上面CodeGroover发布的解决方案中有一个小问题,如果您更改文件,则必须重新启动服务器才能实际使用更新的文件(至少在我的情况下)。

所以搜索了一下,我发现这个要使用:

sudo npm -g install simple-http-server # to install
nserver # to use

然后它将在http://localhost:8000


#2楼

最后, Mozilla文档明确指出 :

如果标头通配符为: Access-Control-Allow-Origin:*,则上面的示例将失败 由于Access-Control-Allow-Origin明确提及http://foo.example ,因此凭据识别内容将返回到调用的Web内容。

因此,使用'*'不只是一个不好的做法。 根本行不通:)


#3楼

如果您正在进行本地测试或从file://类的file://调用文件,则需要禁用浏览器安全性。

在MAC上: open -a Google\\ Chrome --args --disable-web-security


#4楼

我在Chrome中也遇到了相同的错误(我没有测试其他浏览器)。 这是由于我浏览的是domain.com而不是www.domain.com。 有点奇怪,但是我可以通过在.htaccess中添加以下几行来解决问题。 它将domain.com重定向到www.domain.com并解决了问题。 我是一个懒惰的Web访问者,所以我几乎从不键入www,但在某些情况下显然是必需的。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

#5楼

并非所有服务器都支持jsonp。 它要求服务器在其结果中设置回调函数。 我用它来从返回纯json但不支持jsonp的站点获取json响应:

function AjaxFeed(){return $.ajax({url:            'http://somesite.com/somejsonfile.php',data:           {something: true},dataType:       'jsonp',/* Very important */contentType:    'application/json',});
}function GetData() {AjaxFeed()/* Everything worked okay. Hooray */.done(function(data){return data;})/* Okay jQuery is stupid manually fix things */.fail(function(jqXHR) {/* Build HTML and update */var data = jQuery.parseJSON(jqXHR.responseText);return data;});
}

#6楼

确保您使用的是最新版本的JQuery。 我们遇到了针对JQuery 1.10.2的错误,使用JQuery 1.11.1后该错误已得到解决


#7楼

民间,

我遇到了类似的问题。 但是使用Fiddler,我可以解决这个问题。 问题在于,在Web API端的CORS实现中配置的客户端URL不得带有尾随的正斜杠。 通过Google Chrome提交请求并检查Fiddler的Headers部分的TextView选项卡后,错误消息显示如下内容:

*“指定的策略源your_client_url:/'无效。 它不能以正斜杠结尾。”

这确实很古怪,因为它在Internet Explorer上可以正常工作,但是在使用Google Chrome浏览器进行测试时让我头疼。

我在CORS代码中删除了正斜杠并重新编译了Web API,现在可以通过Chrome和Internet Explorer访问该API,而不会出现任何问题。 请试一下。

谢谢,安迪


#8楼

在Google Chrome v5.0.375.127上对我有效(我收到警报):

$.get('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150',
function(json) {alert(json.photos[1].photoUrl);
});

我也建议您改用$.getJSON()方法,因为以前的方法不适用于IE8(至少在我的机器上):

$.getJSON('http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&callback=?&minx=-30&miny=0&maxx=0&maxy=150',
function(json) {alert(json.photos[1].photoUrl);
});

您可以从这里在线尝试。


更新:

现在,您已经显示了代码,我可以看到它的问题。 您同时具有匿名函数和内联函数,但是都将被称为processImages 。 这就是jQuery的JSONP支持的工作方式。 注意我如何定义callback=? 这样您就可以使用匿名函数。 您可以在文档中阅读有关它的更多信息 。

另一点是您不应调用eval。 传递给匿名函数的参数已由jQuery解析为JSON。


#9楼

这是相同的原始策略 ,您必须使用JSON-P接口或在同一主机上运行的代理。


#10楼

据我所知,您有两个问题:

  1. 您没有在$.get传递“ jsonp”类型说明符,因此它使用的是普通的XMLHttpRequest。 但是,您的浏览器支持CORS(跨域资源共享),如果服务器确定,则允许跨域XMLHttpRequest。 那就是Access-Control-Allow-Origin头文件的来源。

  2. 我相信您提到您是通过file:// URL运行它的。 CORS标头有两种方式来表示跨域XHR正常。 一种是发送Access-Control-Allow-Origin: * (如果您是通过$.get到达Flickr的,则必须这样做),另一种是回显Origin头的内容。 但是, file:// URL会产生一个空的Origin ,不能通过回显来授权。

第一次通过Darin的建议使用$.getJSON$.getJSON 。 如果看到子字符串callback=?将请求类型从其默认值“ json”更改为“ jsonp”有点神奇callback=? 在网址中。

这样就解决了第二个问题,不再尝试从file:// URL执行CORS请求。

为了向其他人说明,以下是简单的故障排除说明:

  1. 如果您尝试使用JSONP,请确保符合以下条件之一:

    • 您正在使用$.get并将dataType设置为jsonp
    • 您正在使用$.getJSON并包含callback=? 在网址中。
  2. 如果您尝试通过CORS进行跨域XMLHttpRequest ...
    1. 确保您正在通过http://进行测试。 通过file://运行的脚本对CORS的支持有限。
    2. 确保浏览器实际上支持CORS 。 (Opera和Internet Explorer迟到了)

#11楼

您可能需要在调用的脚本中添加HEADER,这是我在PHP中要做的事情:

header('Access-Control-Allow-Origin: *');

跨域AJAX ou服务WEB (法语)中的更多详细信息。


#12楼

对于PHP-在Chrome,Safari和Firefox中为我工作

https://w3c.github.io/webappsec-cors-for-developers/#avoid-returning-access-control-allow-origin-null

header('Access-Control-Allow-Origin: null');

使用axios将php实时服务与file://一起使用


#13楼

只要请求的服务器支持JSON数据格式,请使用JSONP(JSON填充)接口。 它使您可以发出外部域请求,而无需代理服务器或精美的标题。


#14楼

我们通过http.conf文件对其进行了管理(已编辑,然后重新启动HTTP服务):

<Directory "/home/the directory_where_your_serverside_pages_is">Header set Access-Control-Allow-Origin "*"AllowOverride allOrder allow,denyAllow from all
</Directory>

Header set Access-Control-Allow-Origin "*" ,可以放置一个精确的URL。


#15楼

就我而言,相同的代码在Firefox上可以正常工作,但在Google Chrome上却不能。 谷歌浏览器的JavaScript控制台说:

XMLHttpRequest cannot load http://www.xyz.com/getZipInfo.php?zip=11234.
Origin http://xyz.com is not allowed by Access-Control-Allow-Origin.
Refused to get unsafe header "X-JSON"

我必须删除Ajax URL的www部分,以使其与原始URL正确匹配,然后工作正常。


#16楼

对于一个简单的HTML项目:

cd project
python -m SimpleHTTPServer 8000

然后浏览您的文件。


#17楼

我使用Apache服务器,所以我使用过mod_proxy模块。 启用模块:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

然后加:

ProxyPass /your-proxy-url/ http://service-url:serviceport/

最后,将proxy-url传递给脚本。

XmlHttpRequest错误:Access-Control-Allow-Origin不允许使用原点null相关推荐

  1. php access control allow origin,js请求跨域问题--Access-Control-Allow-Origin

    在前台调试的时候出现XMLHttpRequest cannot load http://www.xx.com/Action/Index.php?Action=11. No 'Access-Contro ...

  2. Access to XMLHttpRequest at ‘http://xx‘ from origin ‘http://xx‘ has been blocked by CORS policy:

    Access to XMLHttpRequest at 'http://xx' from origin 'http://xx' has been blocked by CORS policy: 问题解 ...

  3. 解决Access to XMLHttpRequest at http:XXX from origin http:XXX has been blocked by CORS policy: No Acce

    Access to XMLHttpRequest at http:XXX from origin http:XXX has been blocked by CORS policy: No Access ...

  4. Response to preflight request doesn‘t pass access control check: The value of the ‘Access-Control-Al

    错误:Response to preflight request doesn't pass access control check: The value of the 'Access-Control ...

  5. has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check

    has been blocked by CORS policy: Response to preflight request doesn't pass access control check 这个错 ...

  6. GO + React + Axios Response to preflight request doesn't pass access control check: It does not hav

    使用Go + Reat 使用 Axios 请求后端, 出现: Access to XMLHttpRequest at 'http://127.0.0.1:20002/v1/user/login' fr ...

  7. 关于Springboot中跨域问题的解决(Response to preflight request doesn‘t pass access control check)

    Springboot中跨域问题的解决 等不及的小伙伴,直接跳到结论部分即可,谢谢!!! 1. 背景 1.1 使用技术栈 Spring Security Springboot Vue.axios Jwt ...

  8. [认证授权] 6.Permission Based Access Control

    在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证.那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务 ...

  9. 关于跨域 Response to preflight request doesn‘t pass access control check

    做项目的时候由于访问了不同的服务器,然后导致了跨域问题,报错情况为: has been blocked by CORS policy: Response to preflight request do ...

  10. Swift 新特性 - 访问控制(Access Control)

    苹果在发布了Xcode 6 Bate 4后为Swift添加了新的特性--访问控制(Access Control),并且更新了The Swift Programming Language文档,我抽空把这 ...

最新文章

  1. 深入浅出解释FFT(六)——深入理解fft变换
  2. 移植net-snmp 出现的编译问题 ./libs/libnetsnmpsnmpd.a(snmpd.o): relocation R_ARM_THM_MOVW_ABS_NC against `
  3. 【Linux sshfs】sshfs将远程目录挂载到本地目录
  4. 优先队列——斐波那契堆(without source code)
  5. 雷军:启动手机+AIoT双引擎战略 5G春天到来前打持久战
  6. css取消聚焦边框[Chrome,Safari]
  7. c语言寻找文件指令,c语言实现文件查找
  8. 一个开发人员,遇到问题一句“加载出错“就完事了?
  9. Bulk Insert命令详细
  10. 专科学校计算机是必修课吗,高等专科学校公共计算机选修课的开展与探索
  11. 台州学院计算机翁黄格,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.DOC...
  12. 【一起学数据结构与算法分析】第二篇:字谜游戏
  13. 域名系统的主要功能是什么?域名系统中的根服务器和权威服务器有何区别?权威服务器与管辖区有何关系?
  14. 自己做量化交易软件(20)通达信公式选股程序的实现
  15. 图片怎么压缩到200K以内,这3个图片压缩方法,简单有效
  16. LQ0069 李白打酒加强版【DP】
  17. 不用下载软件,免费将PDF文件缩小的方法分享
  18. 数据库与身份认证:数据库的基本概念
  19. 刺激越多效果越好?无创神经调控技术(rTMS)缓解疼痛
  20. Barbalat引理与类李雅普诺夫引理,及它们在自适应控制系统设计的应用

热门文章

  1. 王立平--android中的anim(动画)
  2. RefreshParenwin 打开子窗体 并回发
  3. 关于COM的Reg-Free(免注册)技术简介及实例讲解。
  4. 把一个数组的值赋给另一个数组(VB.NET)
  5. 2019CSP-S初赛知识点汇总
  6. 【[USACO13NOV]没有找零No Change】
  7. 《构建之法》 读书笔记(6)
  8. 概念模型——分析模式学习笔记
  9. Linux安全运维进阶:SSH常见配置
  10. touch无法创建文件或者文档