这是我的示例JSON响应:
[{"id":11137,"name":"Agra"},{"id":11138,"name":"Albizzate"}]
我需要迭代每个数组对象并打印id
和name
:
$.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库函数!有什么想法发生了什么?
答案 0 :(得分:2)
问题是complete
回调没有将返回的数据作为参数传递:
完成(jqXHR,textStatus)
请求完成时要调用的函数(执行成功和错误回调之后)。该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest中)对象和一个对请求状态进行分类的字符串(“成功”,“未修改”,“错误”,“超时”,“中止”或“parsererror”)。
大概你看到的奇怪的键/值是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']);
}
}