首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AJAX访问Panoramio API - error“access -Control-Allow-Origin不允许原始hxxp://foo.bar。”

使用AJAX访问Panoramio API - error“access -Control-Allow-Origin不允许原始hxxp://foo.bar。”
EN

Stack Overflow用户
提问于 2010-12-27 20:44:44
回答 1查看 994关注 0票数 0

我目前遇到了这个问题,我想知道为什么...?

错误消息为:

"XMLHttpRequest无法加载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=?访问控制-允许-原始地址不允许使用原始地址hxxp://foo.bar。test_panoramio.html:59Uncaught SyntaxError:意外令牌)“

"hxxp://foo.bar“指的是我运行脚本的站点。

网站上的"test_panoramio.html“包含以下内容:

代码语言:javascript
复制
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=?";

function myScriptFn()
 {
  if (window.XMLHttpRequest) {
   myAjax = new XMLHttpRequest();
  if ( typeof myAjax.overrideMimeType != 'undefined') {
  myAjax.overrideMimeType('text/xml');
 }
} else if (window.ActiveXObject) {
myAjax = new ActiveXObject("Microsoft.XMLHTTP");
} else {
  alert('The browser does not support the AJAX XMLHttpRequest!!!');
}

myAjax.onreadystatechange = function() 
{
       handleResponse();
} 

myAjax.open('GET', url, true);
myAjax.send(null);

}

function handleResponse()
{
if (myAjax.readyState == 4){    // Response is COMPLETE
    if ((myAjax.status == 200) || (myAjax.status = 304))
    {
            // do something with the responseText or responseXML
             processResults();

     }else{
     alert("[handleResponse]: An error has occurred.");
     }
     }
}

function processResults()
{

 myObj = eval( '(' + myAjax.responseText + ')' );
 ...
 doSomething()
 ...
}

如果直接在浏览器中键入,Panoramio URL即可正常工作。

你能帮我一下吗,我已经没有希望了……

先谢谢你,

你的马可

EN

回答 1

Stack Overflow用户

发布于 2010-12-27 20:48:43

你遇到的是the same origin policy,它阻止了通过XMLHttpRequest的跨域请求。如果站点支持是(也是您试图访问的那个!) JSONP,则有一个变通方法。这意味着您只需要一个填充了callback参数的<script>标记,如下所示:

代码语言:javascript
复制
<script type="text/javascript" src="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=myFunction"></script>

和一个同名的函数:

代码语言:javascript
复制
function myFunction(data) {
  //data is what came back, it's a javascript object
}

You can test out a working example here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4538725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档