无法循环通过对象

时间:2014-03-29 02:05:09

标签: php jquery ajax

我正在使用jquery post向服务器端发送一些值。作为回应,我回来了。然后我通过使用JSON.parse()转换成一个对象...当我在控制台日志中看到我看到的对象时,我看起来很好。现在,当我试图遍历对象并尝试检索值时,我无法遍历它。我无法弄清楚我在这里失踪了什么。我在on change事件上发送值。所以基本上每次在change事件上都会运行for循环

这是我的js

$(function(){
    var categoryChoiceVal = '';
    var x = [];
    var html = '';
    $('select').change(function() {
        categoryChoiceVal = $('.categoryChoice option:selected').text().replace(/ /g, '%20');
        $.post("ajax.php", { categoryChoiceVal:categoryChoiceVal},function(data) {

            x = $.parseJSON(data)
            console.log(x);
        }); 
        $.each(x, function(){
            html += this.address;
        });
        $('.dataContainer').html(html);
    });

});

这是我正在执行此操作的页面。 http://soumghosh.com/otherProjects/phpDataOperation/eventcCalendar/testOne.php

2 个答案:

答案 0 :(得分:1)

您无需使用$.post解析json响应。请注意文档(https://api.jquery.com/jQuery.post/)中有第四个参数dataType

例如:

$.post( "test.php", { func: "getNameAndTime" }, function( data ) {
  console.log( data.name ); // John
  console.log( data.time ); // 2pm
}, "json");

无需解析它。

仅在成功回调中访问数据,如该示例中所示。将循环移动到成功回调中。

答案 1 :(得分:0)

尝试将代码放入回调中:

$.post("ajax.php", { categoryChoiceVal:categoryChoiceVal},function(data) {
     x = $.parseJSON(data)
     console.log(x);

     $.each(x, function(){
          html += this.address;
     });
     $('.dataContainer').html(html);
}); 

$.post是异步的。当您致电$.post时,服务器的响应尚未到达。通过放入回调,您可以确保在运行代码时响应已到达。