Доступ к Panoramio API с использованием AJAX - ошибка «Происхождение hxxp: //foo.bar не разрешено Access-Control-Allow-Origin». - PullRequest
0 голосов
/ 27 декабря 2010

В настоящее время я испытываю эту проблему, и мне интересно, почему ...?

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

"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: //Access-Control-Allow-Origin не разрешает использовать foo.bar. test_panoramio.html: 59Uncaught SyntaxError: неожиданный токен) "

" hxxp: //foo.bar "относится к сайту, на котором выполняется скриптfrom.

"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 Ответ

1 голос
/ 27 декабря 2010

У вас есть та же политика происхождения , которая предотвращает междоменные запросы через 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
}

Вы можете проверить работающий пример здесь .

...