对于这个特定问题,我正在使用 Tag-it https://github.com/aehlke/tag-it ,一个专门使用标签的 jQuery 插件
我有一个标签列表,我正在使用 ajax 来使用 jQuery ui 自动完成填充
我需要做的是,当 ajax 调用返回 false 时,向特定函数 BeforeTagAdded 发出 return false ,实质上是说数据库拒绝了此标记条目,不在客户端浏览器中显示该标记
开发人员声明“为了澄清,只需在回调中返回 false 即可拒绝标签。”这就是我想要实现的目标
除了以下代码之外,我还尝试过:
- 将结果全局化到变量中,然后让ajax将结果放入,只返回未定义
- 使用 return false 和/或 event.preventDefault() + stopPropagation() 的组合
- 使用ajax调用的done或complete方法
ajax 调用返回的唯一结果是 result:true 或 result:false 与此同时,除了下面的代码之外,我还将编写一个 jsfiddle
beforeTagAdded: function(event, ui) {
if ( !ui.duringInitialization){ //do not fire on page initialization
$.ajax({
url: "handlers/tags.ashx",
dataType: "json",
data: {
idnumber: entity_id,
tag: ui.tagLabel,
operation:"tag"
}
}).done(function(data){
if(data.result == false){
event.preventDefault();
event.stopPropagation();
}
}).complete(function(data){
});
}
},
最佳答案
Ajax 是异步的。 complete
/done
/success
/等是事件处理程序。在表示收到 HTTP 响应的事件到达之前,它们不会触发。
您无法从这些事件处理程序内部返回,也无法从 beforeTagAdded
函数修改事件,因为 beforeTagAdded
将在收到 HTTP 响应之前完成并返回.
您需要重新考虑您的方法。这可能涉及始终取消 beforeTagAdded
事件,但以编程方式从 Ajax 事件处理程序内部重新启动它。
beforeTagAdded: function(event, ui) {
if ( !ui.duringInitialization){ //do not fire on page initialization
event.preventDefault();
event.stopPropagation();
$.ajax({
url: "handlers/tags.ashx",
dataType: "json",
data: {
idnumber: entity_id,
tag: ui.tagLabel,
operation:"tag"
}
}).done(function(data){
if(data.result != false){
something(); // that would have happened if you hadn't called preventDefault before
}
}).complete(function(data){
});
}
},
关于javascript - jQuery:在调用 ajax 的函数内返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920411/