Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个ajax for jQuery.sortable会多次执行更新?_Javascript_Php_Jquery_Ajax_Jquery Ui - Fatal编程技术网

Javascript 为什么这个ajax for jQuery.sortable会多次执行更新?

Javascript 为什么这个ajax for jQuery.sortable会多次执行更新?,javascript,php,jquery,ajax,jquery-ui,Javascript,Php,Jquery,Ajax,Jquery Ui,这是这个问题的继续: 问题如下: 我想使用jqueryuisortable函数来允许用户设置订单,然后在更改时将其写入数据库并进行更新。有人能举例说明如何做到这一点吗 因为我需要能够快速地重新订购东西,所以我认为这会非常有用。然而,公认的解决方案存在一个大问题。我在此引述答案: 下面是一个快速示例,它在元素改变位置后立即将数据发送到指定的URL $('#element').sortable({ axis: 'y', update: function (event, ui) {

这是这个问题的继续:

问题如下:

我想使用jqueryui
sortable
函数来允许用户设置订单,然后在更改时将其写入数据库并进行更新。有人能举例说明如何做到这一点吗

因为我需要能够快速地重新订购东西,所以我认为这会非常有用。然而,公认的解决方案存在一个大问题。我在此引述答案:

下面是一个快速示例,它在元素改变位置后立即将数据发送到指定的URL

$('#element').sortable({
    axis: 'y',
    update: function (event, ui) {
        var data = $(this).sortable('serialize');

        // POST to server using $.post or $.ajax
        $.ajax({
            data: data,
            type: 'POST',
            url: '/your/url/here'
        });
    }
});
它使用元素id创建一个元素数组。所以,我通常会这样做:

<ul id="sortable">
   <li id="item-1"></li>
   <li id="item-2"></li>
   ...
</ul>
$( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
} );

function save(){
    var order = $("#sortable").sortable('serialize');
    console.log("order: " + order);
    $.ajax({
        data: order,
        type: 'POST',
        url: '/your/url/here'
    });
}
此解决方案的问题在于:它不仅在每次移动项目时更新一次,而且还“存储”其他更新,并在您进行更新之前执行它们。因此,例如,如果移动4个项目,它将更新1+2+3+4次,这将导致更多可能的错误,并使网页在需要管理大量项目时变得更慢


我的问题很简单:为什么会这样?我怎样才能避免这种情况呢?

答案确实很简单(谢谢)。事实上,它所需要的只是添加一个按钮或类似的东西,并让它处理更新

让我们想象一下,我添加了一个带有
onclick=“save()”
的按钮。如果我们将代码保留如下:

<ul id="sortable">
   <li id="item-1"></li>
   <li id="item-2"></li>
   ...
</ul>
$( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
} );

function save(){
    var order = $("#sortable").sortable('serialize');
    console.log("order: " + order);
    $.ajax({
        data: order,
        type: 'POST',
        url: '/your/url/here'
    });
}

我们将看到,脚本只按我们现在的顺序执行一次,避免了性能降级和顺序错误。

对此的答案确实非常简单(谢谢)。事实上,它所需要的只是添加一个按钮或类似的东西,并让它处理更新

让我们想象一下,我添加了一个带有
onclick=“save()”
的按钮。如果我们将代码保留如下:

<ul id="sortable">
   <li id="item-1"></li>
   <li id="item-2"></li>
   ...
</ul>
$( function() {
    $( "#sortable" ).sortable();
    $( "#sortable" ).disableSelection();
} );

function save(){
    var order = $("#sortable").sortable('serialize');
    console.log("order: " + order);
    $.ajax({
        data: order,
        type: 'POST',
        url: '/your/url/here'
    });
}

我们将看到,脚本只按我们现在的顺序执行一次,避免了性能降级和顺序错误。

在您的示例中似乎是不可避免的。因为如果您将第四个项目移动到第一个位置,您的脚本不仅需要更新被移动项目的位置(顺序),还需要删除之前的所有记录。如果这是不可接受的,那么在重新定位每个元素后,您是否可以关闭AJAX请求,而只在用户按下submit后发送表单数据?嗯。。。你说得对,这似乎是一个很好的解决办法。我试试看,以你为例,这似乎是不可避免的。因为如果您将第四个项目移动到第一个位置,您的脚本不仅需要更新被移动项目的位置(顺序),还需要删除之前的所有记录。如果这是不可接受的,那么在重新定位每个元素后,您是否可以关闭AJAX请求,而只在用户按下submit后发送表单数据?嗯。。。你说得对,这似乎是一个很好的解决办法。我试试看