JQuery和websocket
我是websocket和延迟函数的新手,如果这很愚蠢,请原谅 据我所知,当您启动一个函数并希望在第一个函数完成时再次启动时,将使用延迟 我有一个websocket发送两个事件。在客户端,调用ajax请求以获取要插入页面的html代码。我需要在插入第二个事件中的事件代码之前,先插入ajax resquest中的第一个事件代码。第一个事件并不总是发送,但当它被发送时,两个事件非常接近,我得到:JQuery和websocket,jquery,websocket,jquery-deferred,Jquery,Websocket,Jquery Deferred,我是websocket和延迟函数的新手,如果这很愚蠢,请原谅 据我所知,当您启动一个函数并希望在第一个函数完成时再次启动时,将使用延迟 我有一个websocket发送两个事件。在客户端,调用ajax请求以获取要插入页面的html代码。我需要在插入第二个事件中的事件代码之前,先插入ajax resquest中的第一个事件代码。第一个事件并不总是发送,但当它被发送时,两个事件非常接近,我得到: 接收evt1 接收evt2 构造html2 构造html1 所以我想在evt1代码完成后执行evt2代
- 接收evt1
- 接收evt2
- 构造html2
- 构造html1
- 接收evt2
- 如果evt1已收到且未结束,请等待
- 否则执行
var evt1_promise = 0 ;
function evt1_fct(topic, data)
{
evt1_promise = $.Deferred() ;
$.ajax({ type: "POST", url: "php/html_evt1.php", async: false }).done(function(data) { $(".Container").html(data) ; evt1_promise.resolve() }) ;
}
function evt2_fct(topic, data)
{
// In case there's no event 1 started
if(!evt1_promise)
{
evt1_promise = $.Deferred() ;
evt1.resolve() ;
}
evt1_promise.done(function()
{
$.ajax({ type: "POST", url: "php/quizz_start.php", data: datas, async: false }).done(function (data) { $(".Quizz").html(data) } }) ;
}) ;
}
我会使用Async.js。这是一个伟大的库,用于发出异步请求并在收到请求时处理结果。对于您的情况,您可以使用Async.parallel,它将在两个结果都在(结果数组中)时关闭这两个请求并调用回调
或者,如果不想使用库,可以缓存每个ajax调用的结果,然后在每次返回调用时运行检查,以确保仅在两个调用完成后构建html:
- 具有检查结果数组大小的回调
- 将此作为回调传递给两个ajax请求
- 当结果数组大小为2(或您发出的请求数)时,运行html构造代码
var webSocket = $.simpleWebSocket({ url: 'ws://127.0.0.1:3000/' });
webSocket.listen(function(message) {
console.log(message.text);
});
webSocket.send({ 'text': 'hello' }).done(function() {
// message send
}).fail(function(e) {
// error sending
});
我不确定我是否理解,您使用的是ajax还是websockets,这不是一回事?两者都是,我通过ajax请求html页面元素,并使用ws进行计算。