基于Ajax的HTTP长轮询

时间:2015-07-06 23:30:22

标签: javascript jquery ajax knockout.js

我正在关注an online example进行HTTP长轮询。我试图在没有KnockoutJS的情况下做到这一点。

以下是我在Javascript上的内容:

$(document.ready(function(){ 
   $("#mybutton").click(function() {
       //Some checks
       pollForMessages();
   }

   function pollForMessages()
   {
       $.ajax({
           url: '......', 
           type:"GET", 
           cache: false, 
           success: function(m) {/*....*/}, 
           error: function(h){/*......*/},
           complete: pollforMessages
       });
   }
}

但是我收到了Ajax错误:$.ajax.error。如果我在github上关注那个例子并使用ko.applyBinding()然后去那条路就行了。在ajax长轮询方面,这种方式与淘汰赛的区别是什么?

1 个答案:

答案 0 :(得分:1)

Knockout与长轮询,xhr,ajax或其他任何事情无关。

我的两分钱是“这个”范围的问题。该示例使用了相当“兴奋”的解决方案。我永远不会把xhr对象放在一个可观察的对象中。这样做是没有意义的。

StackTrace或Chrome控制台的屏幕截图会有所帮助。

您的代码应该有效,请参阅此小提琴http://jsfiddle.net/L8su2/886/

var data = {
    json: $.toJSON({
        text: 'some text',
        array: [1, 2, 'three'],
        object: {
            par1: 'another text',
            par2: [3, 2, 'one'],
            par3: {}
        }
    }),
    delay: 3
}
$(document).ready(function () {
    $("#mybutton").click(function () {
        //Some checks
        alert('start');
        pollForMessages();
    });

    function pollForMessages() {
        alert('poll');
        $.ajax({
            url: "/echo/json/",
            data: data,
            type: "POST",
            success: function (response) {
                console.log(response);
            },
            complete: pollForMessages
        });
    }
});