0

我使用 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();
});

有人有想法吗?

4

2 回答 2

1

如果您使用 jquery 的 ajax,它不仅会为您解决任何可能出现的跨浏览器问题,而且您还可以获得方便的回调。

您的问题是,在 ajax 请求之后,不会在文档上触发 ready 事件。因此,您需要对 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();

    });


}
于 2013-11-12T15:41:38.487 回答
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();
      }
    );
  }
}
于 2013-11-12T15:44:28.217 回答