在ajax响应之后无法循环对象

时间:2016-08-25 12:03:05

标签: javascript php jquery json ajax

我知道这个问题已被提出,但我无法找到我想要的答案。

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

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

成功收到values变量中的数据后,我尝试使用console.log(JSON.stringify(values))中的console进行打印,结果为:

["\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"}]

使用object时无法循环显示此forEach

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

它是如何工作的。 谢谢。

3 个答案:

答案 0 :(得分:5)

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

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

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

}

答案 2 :(得分:1)

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

$.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