Javascript 在获得另外两个ajax更新后更新第三个字段

Javascript 在获得另外两个ajax更新后更新第三个字段,javascript,jquery,Javascript,Jquery,我有一个包含3个元素(数量、单位成本和总价)的表单,它们是根据表单前面的其他数据的结果计算出来的 Qty和UnitCost是基于jquery Get正确填充的,但是,除非我在前面的字段中做了更改(之后它会正确更新),否则我只是使用普通的旧javascript,不会更新总价 我对jquery还是一个新手,我一直在自学,所以我可能错过了一些东西 表格是这样的 A(文本)、B(下拉列表)、C(下拉列表)、数量、单位成本、总价 //Get the unit cost $.get("calcCost.ph

我有一个包含3个元素(数量、单位成本和总价)的表单,它们是根据表单前面的其他数据的结果计算出来的

Qty和UnitCost是基于jquery Get正确填充的,但是,除非我在前面的字段中做了更改(之后它会正确更新),否则我只是使用普通的旧javascript,不会更新总价

我对jquery还是一个新手,我一直在自学,所以我可能错过了一些东西

表格是这样的

A(文本)、B(下拉列表)、C(下拉列表)、数量、单位成本、总价

//Get the unit cost
$.get("calcCost.php", {item:item}, function(data) {
    document.getElementById(unitCostField).value = data;
});
unitCost = document.getElementById(unitCostFiled).value;
Qty的代码本质上是相同的——只会提醒字段和php脚本。两者都工作正常

但是,当我试图计算总价(即数量*单位成本)时,它不会立即更新。它以0开始-当数量或单位成本尚未填写时,这是预期的

//Total Cost
cost = unitCost * qty
document.getElementById(costField).value = cost;
(document.getElementById中的变量已在别处定义)


有什么想法吗

您正在检索由AJAX请求填充的
unitCostField
值。即使
unitCost
赋值低于
$.get
方法,它仍然会在AJAX请求完成之前执行

依赖于AJAX请求的代码必须在回调函数内部处理

var qty;

function calcCost() {
    var unitCost = document.getElementById(unitCostField).value,
        cost = unitCost * qty;
    document.getElementById(costField).value = cost;
}

$.get("calcCost.php", {item:item}, function(data) {
    document.getElementById(unitCostField).value = data;
    calcCost();
});

您需要记住,AJAX中的A代表异步,这意味着AJAX请求的结果不会立即供您使用。相反,浏览器将执行请求,完成调用堆栈上的所有其他内容,只有在请求返回响应时,ajax才会成功执行

您提供的示例更有趣,因为您的成本计算例程需要在Qty和UnitCost请求完成后运行,并且只有在这两个请求都成功时才运行。我相信解决这样一个问题的最好办法,尤其是您已经在使用jquery的情况下,是延迟对象

当你想使用的方法显示一个与你几乎完全相同的问题的解决方案时。 但是,为了方便起见(为了简洁起见,省略了错误处理程序):


我对这里的问题有点模糊。问题是它开始时为0,然后更改为正确的值?谢谢。我现在有它的工作后,我的脸掌心时刻。我重写了所有内容以在1个AJAX调用中更新-因为所有的预要求都是在第一次调用之前选择的,所以将计算合并到一个php文件中非常简单,该文件返回一个逗号分隔的字符串,可用于填充这三个字段。
var calcCostReq = $.get("calcCost.php", {item:item}).done(function(data) {
    document.getElementById(unitCostField).value = data;
    unitCost = document.getElementById(unitCostFiled).value;
});
var qtyReq = $.get("qty.php").done(function(data) {
    //whatever you need to do when qty was successful
});
$.when(calcCostReq, qtyReq).done(function() {
    cost = unitCost * qty
    document.getElementById(costField).value = cost;
}