从jQuery AJAX表单帖子获取未定义的响应

时间:2012-11-03 20:49:59

标签: php javascript jquery ajax

$(document).ready(function() {
    $('#pricingEngine').change(function() {
         var query = $("#pricingEngine").serialize();
         $('#price').fadeOut(500).addClass('ajax-loading');
         $.ajax({
             type: "POST",
             url: "index.php/welcome/PricingEngine",
             data: query,
             dataType: 'json',
             success: function(data)
             {
               $('#price').removeClass('ajax-loading').html('$' + data.F_PRICE).fadeIn(500);
               $('#sku').attr('value') = (data.businesscards_id);
             }
         });
    return false;
   });
});

需要将#sku设置为隐藏表单字段的值(不确定我是否在上面的jQuery代码中正确地执行了此操作。

<input type="hidden" name="sku" id="sku" value="*/PUT VAR VALUE HERE/*" />

还需要将F_PRICE传递给#price div

Chrome中的控制台将JSON响应显示为:

[
 {
  "businesscards_id":"12",
  "X_SIZE":"1.75x3",
  "X_PAPER":"14ptGlossCoatedCoverwithUV(C2S)",
  "X_COLOR":"1002",
  "X_QTY":"250",
  "O_RC":"NO",
  "F_PRICE":"12490",
  "UPS_GROUND":"12000",
  "UPS_TWODAY":"24000",
  "UPS_OVERNIGHT":"36000"
 }
]

然而,我只在价格框中得到'未定义'。这是什么原因?

2 个答案:

答案 0 :(得分:2)

作为JSON返回的结构是一个数组[],其中包含一个元素,即您要定位的对象{}。通过其数组索引[0]

访问它
// Access the array-wrapped object via its [0] index:
$('#price').removeClass('ajax-loading').html('$' + data[0].F_PRICE).fadeIn(500);
// Likewise here, and set the value with .val()
$('#sku').val(data[0].businesscards_id);

您还可以.shift()数组中的第一个元素并使用它:

// Pull the first element off the array, into the same variable
// WARNING: Use a different variable if the array has multiple elements you need to loop over later.
// You *don't* want to do it this way if the array contains multiple objects.
data = data.shift();
$('#price').removeClass('ajax-loading').html('$' + data.F_PRICE).fadeIn(500);
$('#sku').val(data.businesscards_id);

答案 1 :(得分:0)

这是正确的方法(最好的)

$('#sku').val(data.businesscards_id);

如果你坚持使用attr,这应该可行

$('#sku').attr('value', data.businesscards_id);