【问题标题】:Unable to loop over object after ajax responseajax响应后无法循环对象
【发布时间】:2016-08-25 12:03:05
【问题描述】:

我知道这个问题已经被问过了,但我找不到我想要的答案。

我试图循环在ajax 响应之后以JSON data 格式获得的数据。 我的 Javascript 代码是:

function ajaxMe(){
    $(function(){
      $.ajax({
        type : 'GET',
        url : 's-test.php'
      }).done(function(data){
        values = [data];
        alert(data)
      })
    });
  }

在成功接收到values 变量中的数据后,我尝试在console 中使用console.log(JSON.stringify(values)) 打印它,结果如下:

["\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.320850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.420850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.520850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.620850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.720850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.820850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-0.920850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-1.320850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-2.320850\" , \"name\" : \"my corporation\"},\r\n  {\"lat\" : \"51.508742\", \"ln\" : \"-3.320850\" , \"name\" : \"my corporation\"}\r\n"]

而不是

[{"lat" : "51.508742", "ln" : "-0.320850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.420850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.520850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.620850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.720850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.820850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-0.920850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-1.320850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-2.320850" , "name" : "my corporation"},
  {"lat" : "51.508742", "ln" : "-3.320850" , "name" : "my corporation"}]

并且在使用forEach 时无法循环此object

values.forEach(function(v, i){
    alert(i);
});

它是如何工作的。? 谢谢。

【问题讨论】:

  • 您将data 转换为string。尝试使用JSON.parse(data) 来取回JSON 对象。
  • 如果那是你的数据,看起来你的服务器没有正确返回数据
  • 莫名其妙的JSON.stringify 趋势的另一个受害者。如今,我们充斥着将数据结构(JSON)转换为线性字符链(字符串)的人,然后不明白为什么他们再也看不到他们的数据结构了。我只是无法解释每个人是如何做到这一点的。
  • 而不是 JSON.stringify 我无法循环数据,当我循环数据时它只运行一次并返回整个对象而不是一个一个运行。

标签: javascript php jquery json ajax


【解决方案1】:

首先在您的 jquery ajax 代码中添加一个简单的行 dataType: 'json'

$.ajax({
        type: 'GET',
        url: 's-test.php',
        dataType: 'json',
        success: function (data) {               
            $.each(data, function (key, value) {                     
                alert(value.lat);
            });               
        }
    });

【讨论】:

    【解决方案2】:

    试试这个:

    function ajaxMe(){  
      $.ajax({
        method:"GET",
        url : 's-test.php',
        success:function(data){
          var obj = $.parseJSON(data);        
          $.each(obj, function (key, value){                     
              alert(value.lat);
              alert(value.ln);
              alert(value.name);
          });
        }
      });
    
    }
    

    【讨论】:

      【解决方案3】:

      当您从 PHP 脚本回显数据时,请使用 json_encode(您的数据)。这将返回一个 JSON 对象。然后在 AJAX 请求中设置 'dataType: "json"'。然后您就可以使用 console.log(data)。

      $.ajax({
          type : 'GET',
          url : 's-test.php'
          dataType: 'json',
        }).done(function(data){
          values = [data];
          alert(data)
        })
      

      然后,您将能够使用 for 循环来遍历结果,如下所示:

      for(var i = 0; i < data.legnth; i++){
          console.log(data[i]);
      }
      

      json_encode() documentation

      【讨论】:

        猜你喜欢
        • 2012-05-02
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        相关资源
        最近更新 更多