我的方案是帮助您了解我的问题。
在我的页面上,我将onblur事件附加到许多输入字段。
onblur事件调用服务器端方法Method1设置标志并返回true / false
function compute(){
$(' #processing')。attr(" value",true);
$.ajax({
url: '/Method1',
type: 'POST',
contentType: 'application/json;',
data: JSON.stringify({ quantiter: 10}),
success: function (data) {
if (data == "true") {
//set icon
$('#processing').attr("value", false);
}
},
error: function () {
}
});
}
on true,我更新了我的UI,我插入一个小图标表示该字段已更改
我面临的问题是: 修改输入后,用户可以单击“保存”按钮,触发不同的服务器端方法,方法2。
<a onclick="Sauvegarder()">Save</a>
function Sauvegarder() {
var newProcessor = $('#processing').attr("value");
...cal Method 2
}
因此,onblur事件调用Method1但它没有完成,并且在Method1完成之前调用Method2。
这样,就不会设置小图标。
目标:我的目标是从onblur事件中获取结果,设置我的图标,然后在单击保存按钮时调用Method2。
到目前为止,我试图声明一个全局js变量:processing。 我将此var设置为true,当我调用Method1时,如果成功,我将其设置为false。
单击“保存”时,我会检查处理的值。 如果它是假的,意味着方法1已经完成,我称之为Method2。 这个解决方案的问题是,js变量处理的值只检查一次,它可能/可能尚未设置。
其他方法可以做什么?
答案 0 :(得分:0)
使用:
$.ajax({
url: '/Method1',
type: 'POST',
async: false
contentType: 'application/json;',
data: JSON.stringify({ quantiter: 10}),
success: function (data) {
if (data == "true") {
//set icon
$('#processing').attr("value", false);
}
},
error: function () {
}
});
为AJAX调用设置async : false
。
答案 1 :(得分:0)
看一下jquery方法.ajaxComplete()
。这是链接ajaxComplete
如果添加async:false,那么它将不会成为ajax调用,它将成为同步调用。但我必须承认这也是一个选择..