javascript - jQuery:在调用 ajax 的函数内返回 false

标签 javascript jquery ajax tag-it

对于这个特定问题,我正在使用 Tag-it https://github.com/aehlke/tag-it ,一个专门使用标签的 jQuery 插件

我有一个标签列表,我正在使用 ajax 来使用 jQuery ui 自动完成填充

我需要做的是,当 ajax 调用返回 false 时,向特定函数 BeforeTagAdded 发出 return false ,实质上是说数据库拒绝了此标记条目,不在客户端浏览器中显示该标记

开发人员声明“为了澄清,只需在回调中返回 false 即可拒绝标签。”这就是我想要实现的目标

除了以下代码之外,我还尝试过:

  1. 将结果全局化到变量中,然后让ajax将结果放入,只返回未定义
  2. 使用 return false 和/或 event.preventDefault() + stopPropagation() 的组合
  3. 使用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/

相关文章:

javascript - 如何从虚拟专用服务器检索文本文件?

javascript - 如何使用 JavaScript/jQuery 获得更流畅的滑动内容动画?

javascript - 跨域跟踪像素、ASP.NET、jQuery、AJAX

javascript - 如何使 ember 组件从服务器获取数据。将 AJAX 调用放在组件内部似乎不是处理此问题的好习惯

php - 在网页上显示从 tcp 获取的数据而不刷新整个页面?

javascript - 如何将一些参数传递给 addEventListener 中调用的函数?

javascript - Windows 8 应用程序在手指滑动时触发事件

javascript - Angular 5 - 我应该使用哪个向后导航 - href 或 location.back()?

javascript - jquery counter - 允许多次点击 li 但只计算一次

javascript - 在网格中创建悬停效果时遇到问题