Php 无法在对象中循环

Php 无法在对象中循环,php,jquery,ajax,Php,Jquery,Ajax,我正在使用jquerypost向服务器端发送一些值。作为回应,我得到了字符串。然后,我使用JSON.parse()将其转换为一个对象……当我查看控制台日志时,我看到了这个对象,这对我来说很好。现在,当我尝试遍历对象并尝试检索值时,我无法遍历它。我不知道我在这里错过了什么。我正在发送一个on change事件的值。因此,基本上for循环将在每次on change事件时运行 这是我的js $(function(){ var categoryChoiceVal = ''; var x

我正在使用jquerypost向服务器端发送一些值。作为回应,我得到了字符串。然后,我使用JSON.parse()将其转换为一个对象……当我查看控制台日志时,我看到了这个对象,这对我来说很好。现在,当我尝试遍历对象并尝试检索值时,我无法遍历它。我不知道我在这里错过了什么。我正在发送一个on change事件的值。因此,基本上for循环将在每次on change事件时运行

这是我的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);
    });

});
这是我正在做这件事的页面。
尝试将代码放入回调:

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

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

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

您不需要使用
$解析json响应。post
。请注意,文档()中有第四个参数
dataType

例如:

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


只有在成功回调中才能访问数据,如该示例所示。将您的循环移动到成功回调中。

@Khanh——如果我这样做,我将变得未定义that@soum:未定义的
是什么?@Khanh--输出未定义。您应该能够从链接中看到它。如果你需要看我的php代码,让我知道我可以分享它too@soum:我看到您的x是一个包含项目数组的对象,这是您需要数据的地方。只需将您的代码更改为
$。每个(x.items,function(){
相同的问题一天会被问十次。可能是@joe的重复,但我实际上在做服务器端$json=json\u encode($obj,json\u PRETTY\u PRINT);echo$json;这就是我转换为对象的原因。我是否应该像那样处理它?JQuery将自动为您解析json。您不需要自己解析它。