2014-01-20 2 views
2

Я пытаюсь использовать API Всемирного банка, выполняя запросы AJAX на основе перекрестных доменов в своем API. Как указано на их developer page, основной синтаксис вызова будет:jQuery Перекрестная доменная ошибка AJAX Ошибка

http://api.worldbank.org/countries/all/indicators/SP.POP.TOTL?format=jsonP&prefix=Getdata Note: For JsonP format, 'prefix' parameter needs to be specified.

Ниже приводится урезанная версия о том, что я использую в своем коде:

$.ajax({ 
      url:'http://api.worldbank.org/countries/indicators/'+req.indicator+'? 
       format=jsonP', 
      dataType: 'jsonP', 
      jsonp : "prefix", 
      success : function(res){ 

      console.log("Success"); 
      console.log(res) 
      var count = res[0].total; 

     if(requestdata['per_page'] == 1){ 

       request(req, count); 
      } 
      else{ 
       var grid = formatResponse(res); 
      } 
     }, 
     error : function(xhr, status, error){ 
      console.log("Error"); 
      console.log(xhr.statusText); 
      console.log(xhr.responseText); 
      console.log(xhr.status); 
      console.log(error); 
     } 
    }) 

Однако я бегу в эту ошибку каждый раз, когда принимая индикатор образца, скажем, SP.DYN.CDRT.IN:

Uncaught ReferenceError: jquery17209248960050754249_1390249074104 is not defined

Если это помогает, выход консоли:

Error 
success 
*undefined* 
200 
Error {} 

Я думаю, выше сделана ссылка на анонимный обратный вызов, используемом в JQuery вызовов. Я не знаю, почему это не работает. Есть идеи?

+0

Что показывает вкладка вашей консоли Console для вызова этого домена? Какой браузер вы используете? – MonkeyZeus

+0

Я на Chrome 31.0.1650.63 на Linux. [Это] (http://paste.ubuntu.com/6788073/) - это ответ, который я получаю на вкладке сети. –

+0

Предполагается, что это строка JSON? – MonkeyZeus

ответ

3

Проблема с API, который вы вызываете. Это создание ответа JSONP.

jQuery передает обратное имя jQuery123456_7890, но API пытается позвонить jquery123456_7890. Функции в JavaScript зависят от регистра. API: ошибочно преобразование имени функции во все нижние регионы, не знаю почему.

Вам необходимо обход этой проблемы, сообщив jQuery, чтобы использовать все имена обратного вызова в нижнем регистре. Вот для этого параметр jsonpCallback.

$.ajax({ 
    url: 'http://api.worldbank.org/countries/indicators/'+req.indicator+'?format=jsonP', 
    dataType: 'jsonp', 
    jsonp: "prefix", 
    jsonpCallback: "jquery_"+(new Date).getTime(), 
    success: function(res){ 
     console.log("Success"); 
     console.log(res) 
     var count = res[0].total; 

     if(requestdata['per_page'] == 1){ 
      request(req, count); 
     } 
     else{ 
      var grid = formatResponse(res); 
     } 
    }, 
    error: function(xhr, status, error){ 
     console.log("Error"); 
     console.log(xhr.statusText); 
     console.log(xhr.responseText); 
     console.log(xhr.status); 
     console.log(error); 
    } 
}) 
+1

Отлично, спасибо! Думаю, я должен передать сообщение разработчикам API, а также –

+1

@AshwiniKhare: Рад, что я мог бы помочь! :-D Да, я бы сказал им, что их API генерирует неправильные ответы :-) –

Смежные вопросы