0

我有一个简单的 .change 函数,它可以访问数据库并获取一些值设置一些值等。

$('.linequantity').change(function() {
    ...
    $.getJSON(url, function(data) {
      $('#TT-' + lineItem).text(parseFloat(data['price']) * quantity);
    });
});

然后我想要的是,在任何行数量发生变化时,我想更新小计。(是的,它是一个目录类型/购物车风格的应用程序)。我的想法是,让我们使用 .each

$('.linequantity').each(function(){
     ...
   var url = "jQueryFunctions.php?action=getPrice&quantity=" + quantity + "&customer=" + customerID + "&item=" + lineItem;

    $.getJSON(url, function(data) {
       subtotal = subtotal + (parseFloat(data['price']) * quantity);
     });
   });

   $('#subtotal').text(subtotal);

但是,当我这样做时,如果每个甚至都触发的话,我得到的小计为 0。

我已经厌倦了将 .each 放在一个函数中。当我将 .each 移到它自己的函数中时,它会更加一致地触发,但是在 .change 中工作得很好的 getJSON 被跳过了。

在我要求另一个之前,我是否遇到了第一个 json 请求还没有完成的冲突?

我对方法的改变持开放态度,但上述内容有正确的想法/开始。

有任何想法吗?

编辑
数量字段

<input type="text" class="linequantity" id="SQ-<?php echo $value['itemNumber']; ?>" name="Quantity" placeholder="#"/>

总跨度

<span id="subtotal" class="currencyField">$0.00</span>

11:44 编辑:我认为 .each 在 getJson 完成之前就被击中了。在我不使用 jQuery 之前,如何确保 json 请求已完成

4

2 回答 2

1

我认为您只是有一个竞争条件,即 ajax 请求完成得太晚了。解决这个问题的唯一方法是让依赖于请求的方法在完成后运行。有很多方法可以做到这一点,例如使用Deferred and $.when。简单的方法会很好:

$.getJSON(...)
   .done(function () {
      // Stuff that depends on JSON goes here
   });

.each你依赖于多个请求 - 一次可能很多。我会尝试在一个请求中执行此操作(例如,更新您的服务器代码以接受项目列表并计算小计,而不是一次只拥有一个)。否则,您必须不断更新小计,这可能会导致它在视觉上闪烁。服务器的效率也很低。您也许可以执行以下操作:

var jqXHRs = []
$.each(...
   jqXHRs.append($.getJSON(...));
);
$.when(jqXHRs).done(...);

...但我不确定是否$.when可以使用这样的数组,或者是否有任何方法可以将参数列表扩展到它。

于 2012-05-31T16:45:24.740 回答
-1

.change()只能用于元素、框和元素。

考虑到这一点,您可能需要调用 $().val(); 获取活动用户选择/输入数据。

这样的事情可能会做到:

$('.linequantity').change(function() {
    var inputData = $(this).val();
    // other stuff!
});
于 2012-05-31T14:50:17.670 回答