在继续之前,我如何保证执行 jQuery 每个语句
How do I guarantee execution of jQuery Each statement before continuing on?
我的代码如下:
$(".qtyfield").each(function (index) {
if (this.value != "" && this.value > 0) {
var fieldname = this.id;
countme = countme + 1;
var tmpProductID = fieldname.split("_")
var ProductID = tmpProductID[1];
var ShowPrice = $(this).closest('td').prev('td').text();
var Quantity = this.value;
ShowPrice = ShowPrice.replace("$", "");
isItemInCart(ProductID).done(function () {
if (isItemInCartVar) {
updateQuantityByProductID(ProductID, Quantity);
}
else {
addToCartWithQty(ProductID, ShowPrice, Quantity);
}
});
this.value = '';
}
});
我需要确保在运行任何进一步的语句之前完成此代码块(包括所有 ajax 调用)。
几点..
-
isItemInCart
是一个带有 Ajax 调用的函数 -
updateQuantityByProductID
是一个带有 ajax 调用的函数 -
addToCartWithQty
是一个带有 ajax 调用的函数 - 我不知道每个集合中有多少项目(可能会更改)
我的解决方案是在一次调用中整合所有这些逻辑,例如 updateCart()
.
在客户端,您将创建一个需要更新的产品列表,例如
[
{productId: 123, quantity: 2, price: 123},
{productId: 456, quantity: 1, price: 200}
]
此数据被发送到服务器端,会话数据将在那里使用新数量进行更新。基本上,服务器端的代码将执行与所有单独调用相同的逻辑,但它会快得多,因为只有一个请求。
单个请求还可以降低会话锁定争用的可能性,并提高购物车状态的一致性。
在客户端,只有一个回调函数的优势,而不必创建需要同步的单个请求的管道(阅读:屁股上的大痛苦)。
我会重构代码,以便each
循环是服务器端的。通过这种方式,您可以在客户端上准备数组,使用 ajax 发送它(使用唯一调用),然后在将具有 each
循环的服务器上解压缩它。如果您的每个循环都是数十亿个元素怎么办?将其乘以 html 标头的长度。
相反,您可以像这样准备数组。
var serverSide = [];
$(".qtyfield").each(function (index) {
serverSide.push("the data you need");
});
然后,您可以将其作为 JSON 字符串发送
var myArg = JSON.stringify(serverSide)
或逗号分隔的列表(用于更简单的结构)
var myArg = serverSide.join(',');
并具有唯一的 ajax 调用,可以返回任何值/错误消息
$.post("link", myArg).success(function(data){ alert("data"); })
我不知道你有哪个服务器端支持,但如果你使用的是PHP,你可以用json_decode
解码JSON字符串。
如果使用的是 C#,则可能需要查看 JSON.net。
无论哪种方式,您都将拥有更大的灵活性。相反,虽然在客户端上执行每个循环是可能的,但它不是最好的解决方案。Ajax 调用具有标头。
查找 jQuery 延期。每个$.ajax
调用都会返回一个"承诺",您可以等待解决:
var promise1 = $.ajax(...)
var promise2 = $.ajax(...)
然后等待它们得到解决:
$.when(promise1, promise2).then(function(){
//ready to rumble
});
正如你提到的,你不知道每个集合中有多少个项目,只需将每个承诺推送到一个数组中,可以在$.when
中使用,如下所示:
var promises = [];
promises.push($.ajax(...));
$.when.apply(this, promises).then(function(){...});
- 对页面重新加载 Jquery 执行操作
- 我可以使用ajax/javascript/jquery执行curl命令吗
- jquery 执行行为
- Jquery执行基于元素'的父标记
- 等待JQuery执行,直到加载了整个页面,中断执行
- 停止jQuery执行任何进一步的代码
- 使用jQuery执行PHP脚本onclick
- 在JS上使用JQuery执行简单任务的任何原因
- 从javascript或JQuery执行服务器端cgi代码时遇到问题
- 满足两个条件时的 jQuery 执行函数
- 使用 jQuery 执行动态传递的函数调用
- 当输入某些内容时,使用 jquery 执行某些操作
- 使用 JQuery 执行服务器端验证,然后将用户发送到另一个站点
- 如何确保我的点击函数仅使用 Jquery 执行一次
- Jquery 执行函数 第三方函数结束后
- 在文本框中按回车键时的 JQuery 执行函数
- 如果我的文本区域为空,请使用jquery执行此操作
- 从javascript/jquery执行系统命令
- document.getElementById(“id”).对jQuery执行操作
- 通过jQuery执行键盘命令