将套接字io连接传递给ajax成功函数

时间:2016-08-26 00:38:05

标签: jquery ajax socket.io

我正在尝试在ajax成功函数中访问套接字io连接。

    // 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 个答案:

答案 0 :(得分: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);
    });
});