0

我有以下代码返回一个 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"}]
4

3 回答 3

1

首先,它不返回 JSON 对象,正如您在此处定义的那样:

dataType: 'html',

将其更改为:

dataType: 'json',

其次,您正在到处混合结果对象:

success: function(data) {

您的所有交互都应该是data.something并且您json['arr']在这里和html['string']那里使用。

首先纠正这些,然后看看是否清楚如何继续。如果没有,我可以更新这个答案。

于 2012-10-02T23:23:12.910 回答
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"]);
于 2012-10-02T23:20:33.700 回答
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 ]);   
}

记住:点符号写起来更快,也更容易阅读。另一方面,方括号表示法允许访问包含特殊字符的属性和使用变量选择属性,如上面的示例所示。

于 2012-10-02T23:34:12.053 回答