javascript - jquery ui 自动完成 + websockets 实现

标签 javascript jquery jquery-ui websocket jquery-autocomplete

如何使用 nodejs、sockjs 和 jquery ui 自动完成功能实现自动完成?

这是脚本部分

function DocumentReady() {
    $("#movieTitle").autocomplete({
        minLength: 3,
        source: function() {
            var title = $("#movieTitle").val();
            sock.send(title);
        },
        delay: 1000
    })
}

$(document).ready(DocumentReady);


var sock = new SockJS('http://localhost:9999/ws');

sock.onopen = function() {
    console.log('open');
};
sock.onmessage = function(e) {
    console.log('message', e.data);
};
sock.onclose = function() {
    console.log('close');
};

我正在将数据发送到服务器,并且我正在毫无问题地接收到 json 响应。我不知道应该在自动完成的源函数或 onmessage 事件中放入什么,以便在收到数据后填充自动完成列表。

最佳答案

处理此问题的一种方法是有效地使用队列。当您在此自动完成小部件中输入内容时,将搜索词排队。当您收到来自 sockjs 的消息时,出列并添加自动完成的建议。

这是此方法的一个基本示例(仅客户端,如您所述,服务器工作正常):

$(document).ready(function() {
    $("#movieTitle").autocomplete({
        source: function(request, response) {
            sock.send(request.term);
            pending.push(response);
        }
    });
});

var pending = [];
var sock = new SockJS('http://localhost:9999/ws');
sock.onmessage = function(e) {
    var response = pending.shift();
    response($.parseJSON(e.data));
};

如果你觉得没有必要对多个查询进行排队,你可以从源选项中保存最新的“响应”参数。然后,在 onmessage 处理程序中,您接受这个保存的回调并显示收到的建议。

关于javascript - jquery ui 自动完成 + websockets 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596053/

相关文章:

javascript - AJAX、Javascript 显示脚本运行进度

javascript - ReduxForm 需要 store 作为测试中的 props 传递

JQuery datepicker 初始化选择器/字段

javascript - Foreach 元素悬停不同的背景

javascript - 自动完成代码?

javascript - RequireJS:模块嵌套要求中的动态依赖关系

javascript - Javascript 类型的 VSCode 扩展

jquery - 如何在添加/删除嵌套子项时在每个级别自动更改祖先高度

javascript - style = "right:0px"属性在 IE9 中不起作用?

css - jQuery Touch Punch 和 css3 翻译?