具有ajax的一次更改图像功能已经完成
Change image once function which has ajax has finished
我希望在单击时将图像更改为加载符号,然后在AJAX函数完成后再更改回来。
我得到了下面的内容,但它根本没有改变(好吧,它正在改变,但在不等待ajax调用完成的情况下立即改变回来)。为什么会发生这种情况?这是因为我的ajax调用包含在一个函数中吗?
//adding product to cart
$("body").on("click", "#cart_product_add", function() {
var clickedIcon = $(this);
//show the spinning loader
var loader = $(clickedIcon).attr("src").replace("add_icon.png", "green_loading.gif");
$(clickedIcon).attr("src", loader);
var code = $(clickedIcon).data("product_code");
var description = $(clickedIcon).data("product_description");
var whqc = $(clickedIcon).data("product_whqc");
var qty = $(clickedIcon).prev("input[name=qty]").val();
$.when(
addCartProduct($("input[name=cart_id]").val(), code, description, whqc, qty)
).then(function() {
loader = $(clickedIcon).attr("src").replace("green_loading.gif", "add_icon.png");
$(clickedIcon).attr("src", loader);
});
});
$.when()
只有在您传递一个或多个承诺时才能完成其工作。它没有任何神奇的能力来知道您传递的函数内的ajax调用何时完成。所以,如果您不向它传递promise,它只会立即执行.then()
处理程序,并且不等待任何事情(这就是您所看到的)。
由于jQueryAjax调用已经返回了一个promise,您可能只需要返回那个promise。而且,如果您只有一个正在等待的操作,则没有理由在其中任何一个操作时使用$。以下是如何做到这一点的框架:
addCartProduct($("input[name=cart_id]").val(), code, description, whqc, qty).then(function() {
loader = $(clickedIcon).attr("src").replace("green_loading.gif", "add_icon.png");
$(clickedIcon).attr("src", loader);
});
function addCartProduct() {
return $.ajax(...);
}
这可以帮助您http://api.jquery.com/ajaxstart/
您可以指定一次,它会为每个ajax请求触发。
相关文章:
- 为图像滑块jquery添加项目符号功能
- 使用JavaScript功能切换图像位置
- 单击水平滚动库中的图像以居中显示无法工作的功能
- AngularJS:为ng-repeat中的图像添加切换功能
- 如何在保持鼠标悬停功能的同时居中跨过图像
- 这个图像加载功能有什么作用
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 将复选框转换为图像,需要添加拖动功能才能更改图像
- 本地存储功能中的图像不起作用
- 利用移动设备上的滑动功能浏览图像阵列
- 无法使用ajax序列化功能将图像插入数据库
- 如何预加载这些图像以使此功能更平滑
- 功能范围外的图像参考问题
- 如何使用上一个/下一个功能循环数组中的图像
- jQuery预加载图像功能
- 图像搜索功能
- 如何在功能完成后重置图像
- 将 SVG 转换为图像时画布到 URL 功能出现问题
- 使用功能更改文本并包含项目符号图像
- 使用css和jquery突出显示产品功能图像