微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 需要关于pushState和onpopstate的建议

我使用ajax来加载所有页面内容并使按钮恢复工作我使用pushState和onpopstate,如下所示:

function get_page(args){
    ....
    $.ajax({ 

        url     : '/ajax/search?' + param  ,  type : 'get', 
        success : function(data) {   

                    $('#search_aj').html(data); 

                    window.history.pushState( { url: '/ajax/search?' + param  }
                    , "" , '/search?' + param  );
        },  
    });
}

window.onpopstate = function(e) {

    if ( e.state == null ){
        location.href = location.href ;
        return;
    }

    $.ajax({ url     : e.state.url , type : 'get', 
        success : function(data) {   
            $('#search_aj').html(data); 
        },      
    });     
};

它工作但我认为我的代码不好,因为我在Ajax中重复成功代码,如果我在一个中做出改变,我必须在另一个中改变它.
并且代码(e.state == null)是回到第一页的最佳方式?

有什么建议你可以给我来增强我的代码吗?

解决方法:

如果您的脚本中有许多类似的小请求,则可以在将完成此任务的函数中对其进行管理.

function makeRequest(url, successHandler) {
  $.get(url, function(data) {
    $('#search_aj').html(data);

    successHandler && successHandler();
  });
}

function get_page(args) {
  //...
  var historyURL = '/search?' + param;
  var reqURL = '/ajax' + historyURL;

  makeRequest(reqURL, function() {
    window.history.pushState({
      url: reqURL
    }, '', historyURL);
  });
}

$(window).on('popstate', function(e) {
  if (e.state)
    makeRequest(e.state.url);
  else
    location.href = location.href;
});
nothing here, sorry.

jQuery旨在编写更少的代码,因此您可以使用.get而不是.ajax来生成GET请求.此外,使用jQuery .on或本机addEventListener方法订阅DOM事件也是一种好习惯,这样您的代码就不会与其他脚本事件订阅混淆.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐