在JQuery中从JSON读取数据

时间:2014-03-04 08:30:00

标签: jquery json

之前可能已多次询问过,但是当我尝试提醒时,我无法从JSON中获取结果,当我提醒 data.results.vote_sum 时,它表示未定义data.results.url或其他节点。

 $(document).ready(function() {

                function callJson() {

                    $('.my-div').hide();

                    var jqxhr = $.get("url", function(data) {
                      console.log("success");    
                        alert(data.results.vote_sum);                     
                        alert(data.results.title);
                      $('.my-div').prepend(data); 
                    })
                    .done(function() { console.log("second success"); })
                    .fail(function() { console.log("error"); })
                    .always(function() { console.log("finished"); $('.my-div').show(); });                   
                }                
                callJson();
        });

        <div class="my-div">

</div>

JSON 是:

{
   "count":1,
   "results":[
      {
         "result_type":"article",
         "position":0,
         "comments_disabled":false,
         "label_names":[

         ],
         "vote_sum":0,
         "locale":"en-us",
         "section_id":1234,
         "url":"http://www.xyz.com",
         "id":200820164,
         "html_url":"http://www.xyz.com/123",
         "draft":false,
         "source_locale":"en-us",
         "title":"What are these sections and articles doing here?",
         "updated_at":"2014-02-07T23:46:17Z",
         "promoted":false,
         "name":"What are these sections and articles doing here?",
         "created_at":"2014-02-07T23:46:17Z",
         "translation_ids":[
            12345
         ],
         "author_id":123455,
         "vote_count":0
      }
   ],
   "previous_page":null,
   "facets":null,
   "next_page":null
}

6 个答案:

答案 0 :(得分:1)

结果是一个数组。所以你应该像这样使用

data.results[0].vote_sum

答案 1 :(得分:1)

结果是一个数组。尝试:

alert(data.results[0].vote_sum);

答案 2 :(得分:1)

您正在尝试从结果中获取值,但结果本身就是一个数组。

当您尝试获取data.results.vote_sum

时,会给出“未定义”值

相反,你应该选择data.results[0].vote_sum,它在结果数组中给出属于该特定“vote_sum”索引的值“0”。

请参阅fiddle link了解演示。

答案 3 :(得分:0)

尝试使用$.getJSON()代替$.get(),因为您在此处使用JSON

var jqxhr = $.getJSON("url", function(data) {
    console.log("success");    
    alert(data.results[0].vote_sum);                     
    alert(data.results[0].title);
    $('.my-div').prepend(data); 
})

并将data.results更改为data.results[0],因为results是一个数组。

答案 4 :(得分:0)

data.results是一个数组,没有名为vote_sum的属性,尝试访问未定义的属性应该产生undefined所以其他人已经注意到你应该索引到数组{{1}您也可能希望在代码中更明确。如果您总是希望返回JSON,我建议您使用getJSON代替data.results[0].vote_sum

get

答案 5 :(得分:0)

$.each(data,funciton(index,item){
       $.each(data[index].result,function(index,item){
          //now you can use all the objects
          alert(item.result_type)

    });
    });