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