2010-10-17 16 views
0
//when document loads 
    $(document).ready(function() { 

    //navigation item is clicked 
    $('.nav_item').click(function() { 

    //get the clicked nav items id 
    var nav_item = $(this).attr("id"); 
    var location_to_load = nav_item + '.html'; 

    //load the loading html then the page 
    $('#sliding_content_container').load('loading.html', null, showResponse); 

    //load the page 
    function showResponse(){ 
    $('#sliding_content_container').delay(900).load(location_to_load); 
    }; 

    //dont refresh 
    return false; 
    }); 
    }); 

Hey, j'apprends Jquery et me demandais pourquoi je ne peux pas appeler une « page de chargement », puis la destination avec un retard, il semble tout ce que j'essaie ne fonctionne pas par exemple en ajoutant .delay sur ou enchaîner les fonctions ..Jquery: Le chargement d'une page HTML puis une autre page html via AJAX

toute aide sera grande, je donne jquery une bonne vieille fissure.

grâce

Répondre

2

Le delay method est utilisé pour les animations.
Il ajoute un élément de délai à la file d'attente d'animation, en retardant les animations appelées après.
Cela n'affecte pas les méthodes normales.

Au lieu de cela, vous devez appeler le setTimeout function, comme ceci:

$('#sliding_content_container').load('loading.html', null, function() { 
    setTimeout(function() { 
     $('#sliding_content_container').load(location_to_load); 
    }, 900); 
}); 
+0

+1 pour setTimeout, mais ----------------- Pourquoi avez-vous toujours un '.delay (900)' dedans? –

+0

@Peter: J'étais trop fainéant pour lire ce que j'ai collé ... Merci. – SLaks

0

Pour retard au travail, vous devez utiliser la file d'attente pour votre prochain appel à charger showResponse().

function showResponse(){ 
    $('#sliding_content_container') 
     .delay(900) 
     .queue(
     function() 
     { 
      var $this = $(this); 
      $this 
      .load(
       location_to_load, 
       false, 
       function() 
       { 
       $this.dequeue(); 
       } 
      ); 
     } 
    ); 
}; 

Si vous le souhaitez, vous pouvez également utiliser une file d'attente autre que « FX », dans le cas où il bugs que vous que cette file d'attente est généralement utilisé pour les animations.

+1

Cela fonctionne (bien qu'un peu exagéré), mais vous pouvez le faire d'une manière beaucoup plus concise: '.queue (fonction (n) {$ (this) .load (location_to_load, n);});' –

+0

très apprécié - Merci pour votre réponse. – Iamsamstimpson

-1

Il est normal que vous ne puissiez pas le retarder avec .delay(); AJAX est asynchrone par défaut (il est parfois utile de vérifier quelle abréviation de technologie signifie). Cela fait pas mal de temps que j'ai utilisé jQuery, mais pour autant que je m'en souvienne, la requête .ajax devrait convenir. http://api.jquery.com/jQuery.ajax/

+1

Vous ne comprenez pas son problème. – SLaks

+0

merci pour votre réponse, très apprécié aussi -J'ai eu une bonne lecture maintenant et voir mon problème. – Iamsamstimpson