我使用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] 举报,一经查实,本站将立刻删除。