我正在处理jqueries地址更改事件,当用户在浏览器中复制并粘贴URL时遇到了障碍。我需要首先加载包含表单的页面的一部分。我可以在每次分页调用之后这样做,但它似乎效率很低。
下面是我当前的代码块:$.address.change(function(e) {
var urlAux = e.value.split('=');
var page = urlAux[0];
var start = urlAux[1];
if (page == "/visits") {
$.address.title("Profile Views");
if (start) {
$('#start').val(start);
// ***** If a user has copied and pasted this URL with a start value then I first need to load visits.php in the main div tag. Is it possible to see if this is loaded or not?
$.post("visits_results.php", $("#profile_form_id").serialize(),
function(data) {
$('#search_results').html(data);
location.href = "#visits=" + start;
});
}
else {
var args = localStorage.getItem("visits");
$('#main').load("visits.php?" + args, function () { });
}
}
我的尝试是这样的:
var args = localStorage.getItem("visits");
$('#main').load("visits.php?" + args, function () {
$('#start').val(start);
$.post("visits_results.php", $("#profile_form_id").serialize(),
function(data) {
$('#search_results').html(data);
location.href = "#visits=" + start;
});
});
一定有更好的办法…这是用每个分页事件重新加载页面的相同部分(visit .php)。有没有更好的方法来加载url,而不是让它们触发地址更改?
使用paul在他的评论中所做的工作,而不是在访问者.php表单中使用Regex查找html内容,这个解决方案将查找附加到#mainID的data()。
Paul的工作笔记:
经过更多的黑客攻击,我想出了这个解决方案,似乎做到了诀窍。我不确定它有多好,但它似乎奏效了。我现在获取主div id,并对惟一字符串进行正则表达式匹配的形式。如果我没有看到它,我加载表单,然后加载结果。不当然,如果这是一个好的做法或不,但它似乎解决了我的问题。
使用.data()代替正则表达式搜索visit .php的html的方法:
/*check if we're missing visits.php by looking for data() flag*/
if( !($("#main").data()["hasVisitsPhp"]) ){
var args = localStorage.getItem("visits");
$('#main').load("visits.php?" + args, function () {
$('#start').val(start);
$.post("visits_results.php", $("#profile_form_id").serialize(),
function(data) {
/* we've loaded visits.php, set the data flag on #main*/
$('#main').data("hasVisitsPhp","loaded");
$('#search_results').html(data);
location.href = "#visits=" + start;
});
});
}
试试window.location.hash
。更改整个href会触发整个页面重新加载,而仅更改哈希值本身最多只会导致页面滚动。