#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);
})