2010-10-17 3 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; 
    }); 
    }); 

Эй, я учусь Jquery и просто задавался вопросом, почему я не могу назвать «загрузки страницы», а затем пункт назначения с опозданием, кажется, все, что я стараюсь, не работает, например, добавление .delay on или цепочки функций.Jquery: Загрузка страницы HTML, а затем другой HTML-страницы с помощью AJAX

любая помощь будет большой, я даю jquery хорошую старую трещину.

благодаря

ответ

2

delay method используется для анимации.
Он добавляет элемент задержки в очередь анимации, задерживая любые анимации, вызванные после него.
Это не повлияет на обычные методы.

Вместо этого, вы должны вызвать setTimeout function, например:

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

+1 для setTimeout, но ----------------- Почему у вас все еще есть '.delay (900)'? –

+0

@Peter: Мне было слишком лениво читать то, что я вставил ... Спасибо. – SLaks

0

Для задержки на работу, вам нужно использовать очереди для следующего вызова для загрузки в showResponse().

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

Если вы хотите, вы можете также использовать очередь, кроме «FX», в случае, если ошибки, что эта очередь, как правило, используется для анимации.

+1

Это работает (хотя и немного перебор), но вы можете сделать это гораздо более сжатым способом: '.queue (function (n) {$ (this) .load (location_to_load, n);});' –

+0

- Спасибо за ваш ответ. – Iamsamstimpson

-1

Это нормально, что вы не можете отложить его с помощью .delay(); AJAX по умолчанию асинхронный (иногда это помогает проверить, что означает аббревиатура от технологии). Это довольно много времени с тех пор, как я использовал jQuery, но насколько я помню, запрос .ajax должен быть подходящим. http://api.jquery.com/jQuery.ajax/

+1

Вы не понимаете его проблемы. – SLaks

+0

спасибо за ваш ответ, очень ценный, как хорошо. У меня был хороший читать сейчас и увидеть мою проблему. – Iamsamstimpson