2010-02-14 11 views
6

Attualmente sto implementando una sorta di HTTP Push usando Long Polling per i browser che non supportano le risposte ajax multipart.Brower che entrano nello stato "busy" su richiesta Ajax

devo ammettere che, mentre il lato server sta lavorando bene, io sono relativly nuovo al front-end javascript di sviluppo, e quindi può aver fatto alcuni errori evidenti

Il problema è il seguente LongPolling funziona perfettamente su IE 6 , 7,8 e Firefox (anche se Firefox usa multipart lo ha testato con un lungo polling) ma Safari e Chrome immettono lo stato "occupato" del browser durante le richieste Ajax nello stato . (Essi mostrano le finestre attesa del cursore, e Safari mostra anche il suo indicatore "Loading" nella barra del titolo)

Questo è, naturalmente, non è desiderabile ..

Ecco il mio codice per fare la lunga sondaggio sulla base di 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); 
     } 
    }); 
}; 

Nota che sto bypassando i dati parsing funzionalità di jQuery passando il request.responseText direttamente al callback perché Jquery non sembra supportare respones ajax più parti e volevo essere coerenti in tutta la comunicazione percorsi.

risposta

3

Poiché nessuna risposta migliore si è fatta avanti, mi chiedo se un semplice timeout risolverebbe il problema. Mi dispiace dare una "supposizione" invece di una "so che questa è la vera risposta", ma questo potrebbe effettivamente risolverlo:

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); 
     } 
    }); 
}; 
+0

Grazie, mi sembra di sapere poco sul comportamento del browser, ma il tuo consiglio risolto il problema su tutti i browser – Gluber

Problemi correlati