我有一个汽车零件分类部分,我想每页只显示10个广告,并在底部显示分页链接。我看到的每一个PHP分页示例都将PHP代码放在显示数据的同一页面中。。。。我不想这样做。我希望一切都通过jquery和AJAX,并使用XMLHttpRequest将数据推送到页面上。
在我的PHP脚本中,我将分页链接放在一起,每个锚点都有一个"href='#'"answers"linkValue'"的属性,该属性的值被动态设置为相应的页码。PHP生成以下HTML:
<a class="paginateLink" linkvalue="2" href="#""></a>
例如,当点击"linkValue=2"的链接时,该值将传递给jquery函数,并连接到查询字符串的末尾:
'getParts.php?pageNum=2'.
PHP脚本从查询字符串中获取pageNum的值,并使用它来确定返回哪个页面,在本例中,它将返回记录11-20。零件分类页面最初是通过调用头中的"showParts()"函数加载的:
$(document).ready(showParts() );
它又调用PHP脚本"getParts.PHP".
问题在于:我似乎无法从分页链接的单击事件中调用"showParts()"函数。我可以很容易地调用一个简单的警报,我甚至可以调用一个包含警报的函数,但当尝试调用showParts函数时,我只会在url addy的末尾得到"#",然后转到页面顶部。
jquery函数:
$(document).ready(function(){
$(".paginateLink").click(function(){
showParts();
});
});
在这一点上,我甚至不想把查询字符串放在一起,只想得到它,这样函数就可以从一开始启动,即使它只是发回相同的结果。
编辑:不确定我在这里做错了什么,这似乎应该奏效。例如,以下代码有效:
$(document).ready(function(){
$(".paginateLink").click(function(){
alert($(this).attr('linkValue'));
});
});
所以我可以调用一个函数并传递必要的变量,但我不能调用showParts函数,至少不能第二次调用。当页面最初加载时,再次调用该函数,用汽车零件填充页面。
function showParts(str) {
if (str=="") {
document.getElementById("partsDisplay").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("partsDisplay").innerHTML=xmlhttp.responseText;
$(document).foundation('accordion', 'reflow');
$(document).foundation();
}
}
xmlhttp.open("GET","PHP/getParts2.php",true);
xmlhttp.send();
}
看起来您更改了dom中的分页元素,因此删除了click事件。所以,你最好使用:
$(document).ready(function(){
$("body").on("click", ".paginateLink", function(){
showParts();
});
});
这意味着,无论您删除分页还是再次插入,只要您单击正文并且目标是导航链接,它都会触发事件。如果您使用较旧的jQuery,则live
是等效的方法。
发现的另一个错误,您使用:
if (str=="") {
document.getElementById("partsDisplay").innerHTML="";
return;
}
这是错误的,因为以后您将在没有参数的情况下调用该函数。应该是:
if (typeof str === "undefined" || !str) {
document.getElementById("partsDisplay").innerHTML="";
return;
}
但是,由于您使用jQuery,使用并不是更容易
$(document).ready(function(){
$("body").on("click", ".paginateLink", function(e){
e.preventDefault();
$('#partsDisplay').load('PHP/getParts2.php?pageNum=' + $(this).attr('linkvalue'), function() {
$(document).foundation('accordion', 'reflow');
});
});
});