我有以下代码返回JSON数组。我在将值放入HTML输入时遇到问题:
$('#button-validate').live('click', function() {
$.ajax({
url: 'index.php?route=sale/customer/addressValidation&token=<?php echo $token; ?>',
type: 'post',
dataType: 'html',
data: 'shipping_address_1=' + encodeURIComponent($('input[name=\'address[1][address_1]\']').val()) + '&shipping_address_2=' + encodeURIComponent($('input[name=\'address[1][address_2]\']').val()) + '&shipping_city=' + encodeURIComponent($('input[name=\'address[1][city]\']').val()) + '&shipping_region=' + encodeURIComponent($('select[name=\'address[1][zone_id]\']').val()) + '&shipping_zip=' + encodeURIComponent($('input[name=\'address[1][postcode]\']').val()),
beforeSend: function() {
$('.success, .warning').remove();
$('#button-history').attr('disabled', true);
$('#history').prepend('<div class="attention"><img src="view/image/loading.gif" alt="" /> Validating</div>');
},
complete: function() {
$('#button-history').attr('disabled', false);
$('.attention').remove();
},
success: function(data) {
if (data['error']) {
$('div#warning').attr('display', false);
$('div#warning').after('<div class="warning" style="display: none;">' + json['error'] + '</div>');
}else{
$('#shipping_address_1').val(html['shipping_address_1']);
$('#shipping_address_2').val(html['shipping_address_2']);
$('#shipping_city').val(html['shipping_city']);
$('#shipping_zip').val(html['shipping_zip']);
}
}
});
});
JSON数组在Firebug中看起来像这样:
[{"shipping_address_1":"21497 CROZIER AVE","shipping_address_2":"","shipping_city":"BOCA RATON","shipping_region":"FL","shipping_zip":"33428"}]
答案 0 :(得分:1)
首先,它不会返回JSON对象,如您在此处定义的那样:
dataType: 'html',
将其更改为:
dataType: 'json',
其次,你在整个地方混淆了你的结果对象:
success: function(data) {
您的所有互动都应该是data.something
,并且您在此使用json['arr']
并在那里使用html['string']
。
首先纠正这些,然后看看是否清楚如何继续。如果没有,我可以更新这个答案。
答案 1 :(得分:0)
要访问shipping_address_1
,请执行:
data[0].shipping_address_1 OR data[0]["shipping_address_1"] ;
另外,html['shipping_address_1']
是什么?您的JSON对象位于数据中,而不是HTML var中。试试这个:
$('#shipping_address_1').val(data[0]["shipping_address_1"]);
$('#shipping_address_2').val(data[0]["shipping_address_2"]);
$('#shipping_city').val(data[0]["shipping_city"]);
$('#shipping_zip').val(data[0]["shipping_zip"]);
答案 2 :(得分:0)
您可以使用点表示法或括号来访问信息:
带点符号:
data[0].shipping_address_1
使用括号表示法:
data[0]['shipping_address_1']
我建议尽可能使用点表示法,但如果要迭代固定数量的值,我建议使用第二种方法:
for(var i=1; i<6; i++) {
$('#shipping_address_' + i).val(data[0]["shipping_address_"+ i ]);
}
请记住:点符号编写速度更快,也易于阅读。另一方面,方括号表示法允许访问包含特殊字符的属性以及使用变量选择属性,如上面的示例所示。