2016-04-03 3 views
0
 function getResults(){ 
      var text = encodeURIComponent(searchField.val().trim()); 
      $.ajax({ 
       type: "GET", 
       url: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro&format=json&titles=" + text, 
       dataType: "jsonp", 
       success: function(data){ 
        showResults(data, text); 
       } 
      }); 
    } 

    function showResults(data, text) { 
      results.show(); 
      var query = "https://en.wikipedia.org/wiki/" + text; 
      for (var id in data.query.pages) { 
        var code = "<a href=" + query + " class='results'>" + "<div class='results'>"; 
        code = code + "<strong>" + id.title + "</strong>"; 
        code = code + "<br>"; 
        code = code + id.extract; 
        code = code + "</div></a>" 
        $(code).appendTo(results); 
      } 
    } 

В функции showResults отображается id.title и id.extract как неопределенный. Почему это? Что я делаю не так?Почему мой код не получает значения JSON?

ответ

2

Когда вы сделаете это:

for (var id in data.query.pages) 

, id переменная заполняется имя свойства, которое является просто строка. Если вы хотите получить, что значение этого свойства, вы должны ссылаться на значение этого свойства как в:

data.query.pages[id] 

Или, если это объект, который вы тогда хотите .title от, то вам нужно будет

data.query.pages[id].title 

и

data.query.pages[id].extract 
1

Это потому, что при переборе над объектом (с помощью for-var-in-object цикла), то var (id в данном случае) является ключевым, но если вам нужно значение, используйте object[key] синтаксис. Проверьте следующий код

$.ajax({ 
 
    type: "GET", 
 
    url: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro&format=json&titles=newton", 
 
    dataType: "jsonp", 
 
    success: function(data) { 
 
    for (var id in data.query.pages) 
 
     document.write(data.query.pages[id].title); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1

В вашем случае, вы используете только key => '321123'. Чтобы получить стоимость использования объекта key. Получить объект data.query.pages[id].

for (var id in wiki = data.query.pages){ 
    wiki[id].title; 
    wiki[id].extract; 
} 

Этот должен работать.

function showResults(data, text) { 
       results.show(); 
       var query = "https://en.wikipedia.org/wiki/" + text; 
       for (var id in wiki = data.query.pages) { 
         var code = "<a href=" + query + " class='results'>" + "<div class='results'>"; 
         code = code + "<strong>" + wiki[id].title + "</strong>"; 
         code = code + "<br>"; 
         code = code + wiki[id].extract; 
         code = code + "</div></a>" 
         $(code).appendTo(results); 
       } 
     } 
Смежные вопросы