views:

200

answers:

1

I am currently implementing a sort of HTTP Push using Long Polling for browsers that don't support multipart ajax responses.

I have to admit that while the server side is working fine, i am relativly new to front end javascript development, and thus may have made some obvious mistakes

The problem is as follows LongPolling works perfectly on IE 6,7,8 and Firefox ( even though Firefox uses multipart i tested it with long polling too ) but Safari and Chrome enter the browsers "busy" state during the ajax requests. ( they show the windows wait cursor, and Safari also shows its "Loading" indicator in the title bar )

This is of course not desireable..

Here is my code to do the long poll based on Jquery 1.4.1:


function MepSubscribeToQueueLongPoll(name, callback) {

    var queueUrl = MepGetQueueUrl(name, "LongPoll");
    MepLongPollStep(queueUrl, callback);
};

function MepLongPollStep(url, callback) {
    $.ajax({
        url: url,
        async: true,
        cache: false,
        success: function (data,status,request) {
            callback(request.responseText);
            MepLongPollStep(url, callback);
        }
    });
};

Note that i am bypassing the data parsing functionality of Jquery by passing the request.responseText directly to the callback because Jquery does not seem to support multipart ajax respones and i wanted to be consistent across communication paths.

+2  A: 

Since no better answer has stepped forward, I wonder if a simple timeout would solve the problem. Sorry to give a "guess" instead of a "I know this to be true answer", but this might actually fix it.:

function MepLongPollStep(url, callback) {
    $.ajax({
        url: url,
        async: true,
        cache: false,
        success: function (data,status,request) {
            callback(request.responseText);
            window.setTimeout( function(){
              MepLongPollStep(url, callback);
            },10);
        }
    });
};
Doug Neiner
Thanks, I seem to know to little about browser behaviour, but your tip fixed the problem across all browsers
Gluber