2016-08-26 59 views
0

我試圖訪問ajax成功函數內的套接字io連接。將套接字io連接傳遞給ajax成功函數

// Create socket connection 
    var socket = io.connect('http://localhost:81/'); 

    // Ajax request gets auth token 
    $.ajax({ 
     url: 'http://localhost:8000/foo', 
     xhrFields: { 
      withCredentials: true 
     }, 
     success: function (result, textStatus, jqXHR) { 
      socket.on('connect', function() { 
       $('#rows').html(result); 
       socket.emit('message', result); 
      }); 
     } 
    }); 

我該怎麼做?如果我聲明成功功能內的連接,它工作正常

回答

1

你顯示什麼看起來很困惑。在ajax調用完成之前,connect事件可能已經發生,因此您完全會錯過它。

如果有一個合法的理由不想要插入的AJAX結果到DOM,直到套接字連接,那麼你可以做這樣的:

// Ajax request gets auth token 
// start ajax call, save promise 
var p = $.ajax({ 
    url: 'http://localhost:8000/foo', 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

// Create socket connection 
var socket = io.connect('http://localhost:81/'); 
socket.on('connect', function() { 
    // when both socket is connected and ajax call is done, insert results into DOM 
    p.then(function(results) { 
     $('#rows').html(result); 
     socket.emit(result); 
    }); 
}); 
+0

@布賴恩 - 我已經更新了我的答案以匹配您的編輯。下一次,請告訴那些已經回覆了有針對性評論的人,您已經編輯了您的問題,以解決他們指出的問題。否則,我們永遠不知道你做了編輯。 – jfriend00

+0

好酷。它雖然工作。 – Brian

相關問題