JSON响应为输入值

时间:2012-10-02 23:18:25

标签: php jquery ajax json

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

3 个答案:

答案 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 ]);   
}

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