Javascript Ajax承诺使用父/子函数
我使用了一个ajax调用来对照DB检查键入的标记值。taggle文档在Javascript Ajax承诺使用父/子函数,javascript,jquery,ajax,promise,Javascript,Jquery,Ajax,Promise,我使用了一个ajax调用来对照DB检查键入的标记值。taggle文档在onBeforeTagAdd事件上指定return false,以防止添加标记,但我知道这不能用ajax完成,因为它是异步的。我还看到过其他一些问题,这些问题建议承诺让函数依赖于ajax响应,但当ajax调用位于依赖其响应的父函数内部时,我不知道如何使用承诺——有人能给出建议吗?下面是ajax调用的代码: new Taggle('tagexample', { onBeforeTagAdd: function(event
onBeforeTagAdd
事件上指定return false
,以防止添加标记,但我知道这不能用ajax完成,因为它是异步的。我还看到过其他一些问题,这些问题建议承诺让函数依赖于ajax响应,但当ajax调用位于依赖其响应的父函数内部时,我不知道如何使用承诺——有人能给出建议吗?下面是ajax调用的代码:
new Taggle('tagexample', {
onBeforeTagAdd: function(event, tag) {
// return false here would prevent tag from being added
$.ajax({
method:"POST",
url:"inputcheck.php",
data:"tag="+tag,
dataType:"html",
success:function(result){
alert(result);
if (result == 'no') {
// return false here won't work
}
}
});
},
});
Taggle需要支持onBeforeTagAdd方法上的承诺,从外观上看,它不支持承诺 我能想到的唯一可行的方法是总是返回false(在ajax调用完成之后),然后动态创建标记(如果是)
new Taggle('tagexample', {
onBeforeTagAdd: function(event, tag) {
$.ajax({
method:"POST",
url:"inputcheck.php",
data:"tag="+tag,
dataType:"html",
success:function(result){
alert(result);
if (result == 'yes') {
// create tag
}
}
});
return false;
},
});
重新设计应用程序,以便首先将所有允许的标记从服务器查询到客户端数组中,然后可以在
onBeforeTagAdd
事件处理程序中使用该数组,而无需在那里进行任何Ajax调用。像您正在使用的回调API要么支持异步结果,要么不支持异步结果。如果没有,你就无法从外部做任何事情。你可以修改Taggle源代码,你可以预先检查预期的标记,以便同步地获得它们的信息,或者你可以改变设计,以另一种方式解决问题。我不知道为什么这会被否决。如果Taggle API不支持对验证的异步响应,那么您无法从其代码之外让它这样做。这个答案暗示了一个可能的解决办法,它并不完美,但我希望看到其他人在投票表决之前提出更好的想法(除了修改标记代码本身)。