2011-12-16 35 views
12

¿Hay alguna manera de establecer el período de tiempo de espera en $.get()?Tiempo de espera con jQuery.get()

Como yo quiero mi guión para dar una advertencia de que la carga está tomando algún tiempo (tal vez debido a un servidor ocupado o lo que sea) Parece que no puede encontrar en cualquier lugar ..

+0

¿quiere decir que desea activar una función después de un cierto retraso o desea cancelar la solicitud '$ .get' después de un cierto retraso? Si solo está activando una función, puede usar 'setTimeout'. – zzzzBov

Respuesta

23

Sólo tiene que utilizar $.ajax(...):

$.ajax({ 
    url: url, 
    success: function(data){ 
     //... 
    }, 
    timeout: 1000 //in milliseconds 
}); 

también como se indica a continuación en los comentarios se puede utilizar para aplicar .ajaxSetup(...) el tiempo de espera a nivel mundial:

$.ajaxSetup({timeout:1000}); //in milliseconds 
+8

Si quieres hacerlo globalmente, entonces: $ .ajaxSetup ({timeout: 1000}); – epignosisx

+0

@epignosisx eso también. Añadiré eso a la respuesta.^_^ – Neal

+0

¿cuál es el mejor tiempo de espera? 2000 ms? – ISFO

2

de llamadas $.ajax y pase la opción timeout.

+0

:-P (eso es todo) – Neal

4

$.get es una buena abreviatura de $.ajax que tiene una opción timeout, que especificará cuánto tiempo esperará el script antes de cancelar la devolución de llamada.

Puede anular el valor predeterminado global mediante $.ajaxSetup({timeout: 9001}), lo que le permitirá continuar utilizando $.get.

Si simplemente desea alertar al usuario sin cancelar la solicitud, use $.ajax, establezca un tiempo de espera y cancele el tiempo de espera en la devolución de llamada complete.

Aquí hay un código de ejemplo de arranque, no he probado nada de eso, y es probable que se podría convertir en un plugin con un poco de trabajo:

(function(){ 
    var t, delay; 
    delay = 1000; 
    $('.delay-message').ajaxStart(function() { 
    var $this; 
    $this = $(this); 
    t = setTimeout(function() { 
    $this.trigger('slowajax'); 
    }, delay); 
    }).ajaxComplete(function() { 
    if (t) { 
     clearTimeout(t); 
    } 
    }); 
}()); 

$('.delay-message').on('slowajax', function() { 
    $(this).show().delay(2000).fadeOut(1000); 
}); 
2

uso ajaxSetup

$.ajaxSetup({ 
timeout:2000 // in milliseconds 
}); 

//your get request here 
1

Simplemente use .ajax() para esto; después de todo, .get() es solo una envoltura alrededor de esto. Usted puede hacer algo como:

function doAjax() { 
    var $warning = $("#warning").hide(), // Always hide to start with 
     warningTimeoutId = 0; 

    warningTimeoutId = window.setTimeout(function() { 
     $warning.show(); 
    }, 10000); // wait 10s before showing warning 

    $.ajax({ 
     timeout: 30000, // 30s timeout 
     complete: function() { 
      // Prevent the warning message from appearing 
      window.clearTimeout(warningTimeoutId); 
     } 
     ... // other config 
    }); 
} 

Aquí se inicia un tiempo de espera antes de la llamada Ajax que se muestra después de 10 segundos a menos que la petición Ajax ya ha terminado.