使用jQuery迭代JSON对象数组时的奇怪行为

时间:2011-10-02 15:17:53

标签: javascript ajax json jquery

这是我的示例JSON响应:

[{"id":11137,"name":"Agra"},{"id":11138,"name":"Albizzate"}]

我需要迭代每个数组对象并打印idname

        $.ajax({
            url: '{{ path('ajax_provinces') }}',
            type: 'POST',
            dataType: 'json',
            data: {region_id: this.value},
            success: function(provinces) {},
            error: function() { alert("error"); },
            complete: function(provinces) {
                $('select#regions ~ span > img').fadeOut('slow');
                $.each(provinces, function(key, val) {
                    alert(key + ": " + val);
                });
            }
        });

问题是我得到的奇怪的结果:函数名称,函数体和jQuery的其他内部东西。好像它是迭代jQuery库函数!有什么想法发生了什么?

2 个答案:

答案 0 :(得分:2)

问题是complete回调没有将返回的数据作为参数传递:

  

完成(jqXHR,textStatus)

     

请求完成时要调用的函数(执行成功和错误回调之后)。该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个对请求状态进行分类的字符串(“成功”,“未修改”,“错误”,“超时”,“中止”或“parsererror”)。

from the docs

大概你看到的奇怪的键/值是jqXHR对象的属性。

您需要处理success中的返回数据,而不是complete。我的理解是complete通常用于应该发生的操作,无论AJAX请求是否成功返回数据(例如隐藏加载动画)。

答案 1 :(得分:0)

您需要成功处理返回的数据,而不是完成。在AJAX调用完成后需要触发函数时使用Complete。 成功后,您将获得从服务器发送的数据

success:function(data){

/// data is JSON object. Now iterate it here 

var i;
    for(i in data){
        alert('the Id ='+data['id']+' the name '+data['name']);

      }

}