【问题标题】:ajax post not being sent when 'change' event is triggered in jquery UI Sortable在 jquery UI Sortable 中触发“更改”事件时未发送 ajax 帖子
【发布时间】:2011-05-29 18:28:49
【问题描述】:

为了便于阅读,我已经剪掉了部分代码。当通过拖动 col_1 的子元素触发 change 事件时,执行下面的位置函数:

$('#col_1').Sortable(
                    {
                        change:  positions,
                    }
                );

问题是“位置”向未通过的服务器发送 ajax 帖子:

function positions(){

   **i've removed some javascript code leading to a javascript variable called "variable" ***

xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('POST', '/positions.php', true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("epositions="+variable);
xmlhttp.send(null);


    return true;
}

所以 Post 不会发送到服务器。但我注意到,如果我改为放置

  $('#col_1').Sortable(
                    {
                            change: function() { positions(); },
                    }
                );

点击 col_1 中子节点的句柄时会发送 ajax 帖子,但无法再对元素进行排序。有

   change: function(data) { positions(); },

也不发送 ajax 请求,尽管元素已排序。

我该如何克服这个问题?是我做错了什么还是 UI 可排序的问题?

【问题讨论】:

    标签: jquery ajax user-interface jquery-ui-sortable


    【解决方案1】:

    我放了一个可能对你有帮助的脚本。这是一个完整的例子,点击这里: XML POST EXAMPLE

    (例如,搜索 test.php

    【讨论】:

    • 嗨,梅尔西。我熟悉如何传递 ajax 调用,并且在我网站的其他部分也这样做过。导致上述问题的原因是 UI 可排序插件的“更改”部分。除非您说问题是由我在上面的代码中使用实际的 javascript 代码而不是 jquery 引起的,否则我不确定您链接的内容有何帮助。
    • 例如positions()在其他方式调用时成功发ajax post,我测试过。只是通过jquery ui sortable的'change'部分调用它时。
    【解决方案2】:

    是的,我明白了,我还有其他怀疑(抱歉,如果不是这种情况)。

    这个怀疑是因为我没有看到 onreadystatechange 在你的代码中的位置。

    正如您已经知道的那样,onreadystatechange 会调用您喜欢的某个函数,而不是相反。

    我不明白为什么

    xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    

    必须在函数内部,这将使事情重新开始,并在每次调用位置时发现自己在状态中穿行,直到 4 状态。如果您查看我的代码,则它不在功能范围内。我的代码中的事情是如何分开的,这是努力工作的结果,并且会影响很多事情。

    还可以查看onreadystatechange 的使用方式和位置。

    这就是我想说的:

    1. 处理 xml 请求(您希望它只在最开始时调用一次),因此在函数内部看起来不是一个好主意(如果您考虑变量范围更糟!!!!)

    2. 注意 onreadystatechange 和其他 xml http 代码,你希望它在你的函数中,所以每次它都会带来新的结果!!!

    3. 照顾好各州!

    如果这一切都不是这样,我请求理解,答案是没有帮助的!

    至于 jquery 我根本不用。

    【讨论】:

      【解决方案3】:

      change 回调是否需要return true; 才能工作? 如果是这样,您可以更新代码以使用change: function(data) { return positions(); }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多