我使用ajax重新加载页面但我有一个问题,即javascript代码仅在第一次工作,然后在刷新它不工作后,我使用此javascript代码为ajax:
function showUser(str, pageno, type, sub) {
if (str == "" || pageno == "" || type == "" || sub == "") {
document.getElementById("txtHint").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("txtHint").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "<?php echo $view['router']->generate('listing') ?>?page=" + pageno + "&genre=" + str + "&cat=" + type + "&subcat=" + sub, true);
xmlhttp.send();
}
并在列表页面中我喜欢这样:
$(document).ready(function () {
alert('test'); //I see alert message only at the first time I run the page
$("#category-table").tablesorter();
});
有人有想法吗?
答案 0 :(得分:1)
如果您使用jquery的ajax,它不仅可以修复任何可能出现的跨浏览器问题,还可以获得方便的回调。
您的问题是,在ajax请求之后,不会在文档上触发就绪事件。因此,您需要对ajax请求使用回调,因此一旦完成,您就可以重新运行tablesorter插件。
您可以在将响应文本分配给DIV html后重新调用该插件控件来执行此操作。但是,由于你有jquery,你可以让事情变得更容易
将您的功能更改为:
function showUser(str, pageno, type, sub) {
var ele = $('#txtHint');
if (str == "" || pageno == "" || type == "" || sub == "") {
ele.html('');
return;
}
ele.load("<?php echo $view['router']->generate('listing') ?>?page=" + pageno + "&genre=" + str + "&cat=" + type + "&subcat=" + sub, function(){
$("#category-table").tablesorter();
});
}
答案 1 :(得分:0)
试试这个
function showUser(str, pageno, type, sub) {
var $txtHint = $("#txtHint");
$txtHint.empty();
if (str && pageno && type && sub) { // assuming none of them are 0
$txtHint.load("<?php echo $view['router']->generate('listing') ?>",
{"page":pageno, "genre":str,"cat":type, "subcat":sub},
function() {
$("#category-table").tablesorter();
}
);
}
}