2010-03-13 3 views
3

Я использую JQuery 1.4 с историей JQuery и пытаюсь выяснить, почему Firebug/Web Inspector показывается 2 XHR GET запросы на каждой страницу загрузке (в два раза больше при посещении своих сайтах домашней страницы (/ или /#).Почему jQuery .load() срабатывает дважды?

например, посещение this (или любой) странице с Firebug включена

Вот отредактированный/соответствующий код (см full source): -.

$(document).ready(function() { 

    $('body').delegate('a', 'click', function(e) { 
     var hash = this.href; 
     if (hash.indexOf(window.location.hostname) > 0) { /* Internal */ 
     hash = hash.substr((window.location.protocol+'//'+window.location.host+'/').length); 
     $.historyLoad(hash); return false;  
    } else if (hash.indexOf(window.location.hostname) == -1) { /* External */ 
    window.open(hash); return false; 
    } else { /* Nothing to do */ } 
     }); 


$.historyInit(function(hash) { 
    $('#loading').remove(); $('#container').append('<span id="loading">Loading...</span>'); 
    $('#ajax').animate({height: 'hide'}, 'fast', 'swing', function() { 
    $('#page').empty(); $('#loading').fadeIn('fast'); 

    if (hash == '') { /* Index */ 
    $('#ajax').load('/ #ajax','', function() { ajaxLoad(); }); 
    } else { 
     $('#ajax').load(hash + ' #ajax', '', function(responseText, textStatus, XMLHttpRequest) { 
     switch (XMLHttpRequest.status) { 
     case 200: ajaxLoad(); break; 
     case 404: $('#ajax').load('/404 #ajax','', ajaxLoad); break; // Default 404 
     default: alert('We\'re experiencing technical difficulties. Try refreshing.'); break; 
     } 
     }); 
    } 

}); // $('#ajax') 
    }); // historyInit() 


    function ajaxLoad() { 
    $('#loading').fadeOut('fast', function() { 
    $(this).remove(); $('#ajax').animate({height: 'show', opacity: '1'}, 'fast', 'swing'); 
    }); 
    } 

    }); 

несколько нот, которые могут быть полезны: -

  • Использование WordPress с/по умолчанию стандартный .htaccess
  • Я перенаправляет /links-like/this к /#links-like/this только через JavaScript (PE)
    • Я достижение выше с window.location.replace(addr); и не window.location=addr;
  • Не стесняйтесь посетить my site при необходимости.

Заранее спасибо.

ответ

1

Код пример, который я первоначально размещен выше возможно, помогли ответить на мой собственный вопрос ...

На моем сайте .load() был вложен в 2 уровня обратных вызовов: -

$.historyInit(function(hash) { 
    $('html, body').animate({scrollTop: '0'}, 500, 'swing', function() { \\ level 1 
     $('#loading').remove(); $('#container').append('<span id="loading">Loading...</span>'); 
     $('#ajax').animate({height: 'hide'}, 'fast', 'swing', function() { \\ level 2 
      $('#page').empty(); $('#loading').fadeIn('fast'); 

      if (hash == '') { /* Index */ 
       $('#ajax').load('/ #ajax','', function() { ajaxLoad(); }); 
      } else { 
       $('#ajax').load(hash + ' #ajax', '', function(responseText, textStatus, XMLHttpRequest) { 
        switch (XMLHttpRequest.status) { 
         case 200: ajaxLoad(); break; 
         case 404: $('#ajax').load('/404 #ajax','', ajaxLoad); break; // Default 404 
         default: alert('We\'re experiencing technical difficulties. Try refreshing.'); break; 
         } 
        }); 
       } 

      }); // $('#ajax') 
     }); // $('html, body') 
    }); // historyInit() 

... перемещение if (hash) оператора вне обратных вызовов приводит меня обратно к 1 XHR GET для всех страниц (с / как единственным исключением).

Еще раз спасибо за помощь Паоло.

2

Я думаю вы ответили на свой вопрос:

"Я перенаправив /links-like/this к /#links-like/this через JavaScript только (PE)"

+0

Нет, попробовал это. Я делаю это в простой JS на заголовках страниц, например: ' ' Замечание' window.location.replace (g); 'все равно имеет тот же эффект. Любые другие предложения? Спасибо в любом случае Пауло. – LeslieOA

Смежные вопросы