Не удается получить доступ к данным JSON

#json

Вопрос:

У меня возникла проблема, из-за которой я не могу получить доступ к следующему JSON с помощью приведенного ниже кода. Я вижу JSON в своем сетевом средстве просмотра, и ошибок нет, но в функции apiReturn ничего не запускается, и я не могу понять, почему.

 /**/
({
   "batchcomplete": "",
  "query": {
    "normalized": [{
      "from": "mouse",
      "to": "Mouse"
    }],
    "pages": {
      "18845": {
        "pageid": 18845,
        "ns": 0,
        "title": "Mouse",
        "extract": "<p>A <b>mouse</b> (plural: <b>mice</b>) is a small rodent characteristically having a pointed snout, small rounded ears, a body-length scaly tail and a high breeding rate. The best known mouse species is the common house mouse (<i>Mus musculus</i>). It is also a popular pet.</p>"
      }
    }
  }
})


$.getJSON("https://en.wikipedia.org/w/api.php?action=queryamp;origin=*amp;format=jsonamp;exsentences=3amp;prop=extractsamp;titles=Main Pageamp;callback=amp;titles=mouse", function(apiReturn){
        var valueText = apiReturn.query.pages[18845].extract;
        console.log(valueText);
    });
 

Ответ №1:

Это не JSON, это JSONP. Причина, по которой это не работает, заключается в том, что у вас есть пустой callback параметр в строке запроса. Измените amp;callback=amp;titles=mouse значение на amp;callback=?amp;titles=mouse (обратите внимание ? после callback= ), и jQuery правильно обработает его для вас. Например.:

 $.getJSON("https://en.wikipedia.org/w/api.php?action=queryamp;origin=*amp;format=jsonamp;exsentences=3amp;prop=extractsamp;titles=Main Pageamp;callback=?amp;titles=mouse", function(apiReturn){
// Only change is here ---------------------------------------------------------------------------------------------------------------^
    var valueText = apiReturn.query.pages[18845].extract;
    console.log(valueText);
});
 

Еще: http://api.jquery.com/jQuery.getJSON и http://api.jquery.com/jQuery.ajax

Комментарии:

1. (Вздыхает. Если вы не видите a ? в предложении «Изменить…», нажмите обновить.)

Ответ №2:

Убедитесь, что сервер извлекает правильные данные json, потому что ваш код с использованием внешнего поддельного json работает нормально для меня. Должно быть, проблема с ответом json.

 var fakeJsonData = "https://jsonplaceholder.typicode.com/posts/1";

$.getJSON(fakeJsonData, function(apiReturn){
  
        var valueText = apiReturn.body;
        console.log(valueText);
    });
     
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

Ответ №3:

Пожалуйста, добавьте : amp;обратный вызов=? в конце URL-адреса.

Код будет выглядеть так:

 $.getJSON("https://en.wikipedia.org/w/api.php?action=queryamp;origin=*amp;format=jsonamp;exsentences=3amp;prop=extractsamp;titles=Main Pageamp;callback=amp;titles=mouseamp;callback=?", function(apiReturn) {
        var valueText = apiReturn.query.pages[18845].extract;
        console.log(valueText);
    })