2010-12-27 3 views
0

В настоящее время я испытываю эту проблему, и мне интересно, почему ...?Доступ к API Panoramio API с использованием AJAX - ошибка «Происхождение hxxp: //foo.bar не разрешено Access-Control-Allow-Origin».

Сообщение об ошибке:

«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= Origin hxxp:. //foo.bar не допускается Access-Control-Allow-Origin test_panoramio.html:. 59Uncaught SyntaxError: Неожиданное токен) «

« hxxp: //foo.bar »относится к сайту, на котором я запускаю скрипт.

«test_panoramio.html» на сайте содержит, например, следующие:

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

URL-адрес Panoramio работает, если набирается непосредственно в браузере.

Пожалуйста, вы могли бы мне помочь с этим, я бегом из надежды ... :(

Спасибо заранее,

Вашего Марко

ответ

1

Что вы ударом является the same origin policy который предотвращает междоменные запросы через XMLHttpRequest. Существует работа, если поддержка сайта (и та, которую вы пытаетесь получить доступ!), JSONP. Это означает, что все, что вам нужно, это тег <script> с параметром callback , вот так:

<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> 

И функция с тем же именем:

function myFunction(data) { 
    //data is what came back, it's a javascript object 
} 

You can test out a working example here.

+0

Спасибо, Ник! Это решило проблему! А также, большое спасибо за пример, который на самом деле показал его вживую. С наилучшими пожеланиями, Марко – Marko