JQuery和websocket

JQuery和websocket,jquery,websocket,jquery-deferred,Jquery,Websocket,Jquery Deferred,我是websocket和延迟函数的新手,如果这很愚蠢,请原谅 据我所知,当您启动一个函数并希望在第一个函数完成时再次启动时,将使用延迟 我有一个websocket发送两个事件。在客户端,调用ajax请求以获取要插入页面的html代码。我需要在插入第二个事件中的事件代码之前,先插入ajax resquest中的第一个事件代码。第一个事件并不总是发送,但当它被发送时,两个事件非常接近,我得到: 接收evt1 接收evt2 构造html2 构造html1 所以我想在evt1代码完成后执行evt2代

我是websocket和延迟函数的新手,如果这很愚蠢,请原谅

据我所知,当您启动一个函数并希望在第一个函数完成时再次启动时,将使用延迟

我有一个websocket发送两个事件。在客户端,调用ajax请求以获取要插入页面的html代码。我需要在插入第二个事件中的事件代码之前,先插入ajax resquest中的第一个事件代码。第一个事件并不总是发送,但当它被发送时,两个事件非常接近,我得到:

  • 接收evt1
  • 接收evt2
  • 构造html2
  • 构造html1
所以我想在evt1代码完成后执行evt2代码

  • 接收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构造代码

如果您想为WebSocket使用jQuery延迟,请查看

你可以这样做:

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进行计算。