为什么jQuery .load()会触发两次?

时间:2010-03-13 09:36:12

标签: javascript wordpress jquery browser-state

我正在使用带有jQuery历史记录的jQuery 1.4并试图找出为什么Firebug / Web Inspector在每个页面加载时显示2个XHR GET请求(访问我的网站主页时加倍(/或{{ 1}})。

e.g。访问启用了Firebug的this(或任何)页面。

以下是经过编辑/相关的代码(请参阅full source): -

/#

可能有用的一些注意事项: -

  • 使用默认/标准.htaccess
  • 的WordPress
  • 我只通过JavaScript(PE)将$(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'); }); } }); 重定向到/links-like/this
    • 我通过/#links-like/this而不是window.location.replace(addr);
    • 实现了上述目标
  • 如果需要,请随时访问my site

提前致谢。

2 个答案:

答案 0 :(得分:2)

认为你已经回答了自己的问题:

  

“我正在通过JavaScript(PE)将/links-like/this重定向到/#links-like/this

答案 1 :(得分: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(/为唯一例外)。

再次感谢您帮助保罗。