为什么我的代码没有获得JSON值?

时间:2016-04-03 04:39:54

标签: javascript json

        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显示为undefined。这是为什么?我做错了什么?

3 个答案:

答案 0 :(得分: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 :(得分:1)

那是因为当迭代一个对象(使用for-var-in-object循环)时,var(在这种情况下为id)是关键,但如果你需要价值,使用object[key]语法。请检查以下代码

&#13;
&#13;
$.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);
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

在您的情况下,您只使用key =&gt; '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); 
                }
        }