【问题标题】:Filtering items with jQuery (AJAX) - requests finish in wrong order使用 jQuery (AJAX) 过滤项目 - 请求以错误的顺序完成
【发布时间】:2014-04-03 19:56:36
【问题描述】:

我正在为学校做一个项目,它是关于 jQuery、PHP、symfony 和所有网络东西的 :)。 jQuery其实是我第一次使用,虽然已经学会了一些东西,但还是有很多东西不知道怎么解决。

在这个项目中,我应该做的事情之一就是过滤一些结果。我有一个数据库,当网站被加载时,数据库中的所有项目都显示在一个表中。然后在表格上方,有一个文本字段。当我输入它时,表格中的项目会在我输入时被过滤。但是有时,当我写例如“HP”时,jQuery首先完成对“HP”的请求并显示结果,然后它完成了对“H”的请求,因此它会覆盖“HP”的结果,这不应该发生.如果我使请求同步,它会阻止我在处理请求时在文本字段中写入。我怎样才能使请求按照调用顺序完成?

这部分项目的jQuery代码如下所示:

var oldTerm;

function filter() {
var term = $('#term').val();
    //alert(term);
if(term != oldTerm) {
    $.ajax({
        url: url.replace('--', term).replace(/\/$/, '')
                    //musi bejt synchronni
    }).done(function(data) {
        $('#items_table tbody').html(data);
                    alert(term);
        // udalost se musi registrovat po nacteni radku!
        $('.edit_button').click(createForm);
    });
    oldTerm = term;
}
}

$(document).ready(function() {
oldTerm = null;
$('#term').keyup(filter);
});

【问题讨论】:

  • "AJAX" 中的第一个 A 代表 asynchronous — 特别不保证顺序。第一件事是......当我们进行过滤或预先输入建议时,我们会对其进行最小字符计数;我们从不对单个角色采取行动……其次,对其设置超时;在自上次击键后经过 X 毫秒之前,不要进行 AJAX 查询/调用。 (只要用户快速输入,就不会进行过滤;当他们暂停时(1/10 秒?)就是我们发出 AJAX 调用的时候。)

标签: javascript php jquery ajax symfony


【解决方案1】:

我认为你最好的拍摄是为 ajax 调用建立一个队列,也许也可以使用锁。你也可以使用这个:Queue AJAX calls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多