用链接重新发送AJAX请求?

时间:2012-01-12 20:24:24

标签: javascript jquery

是否有重新加载AJAX请求,以便它更新下面代码中从外部网站提取的内容?

$(document).ready(function () {
        var mySearch = $('input#id_search').quicksearch('#content table', { clearSearch: '#clearsearch', });
        var container = $('#content');
        function doAjax(url) {
            if (url.match('^http')) {
                $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                    "q=select%20*%20from%20html%20where%20url%3D%22"+
                    encodeURIComponent(url)+
                    "%22&format=xml'&callback=?", 
                function (data) {
                if (data.results[0]) {
                    var fullResponse = $(filterData(data.results[0])),
                       justTable = fullResponse.find("table");
                    container.append(justTable);
                    mySearch.cache();
                    $('.loading').fadeOut();
                } else {
                    var errormsg = '<p>Error: could not load the page.</p>';
                    container.html(errormsg);
                }
                });
            } else {
                $('#content').load(url);
            }
        }
        function filterData(data) {
            data = data.replace(/<?\/body[^>]*>/g, '');
            data = data.replace(/[\r|\n]+/g, '');
            data = data.replace(/<--[\S\s]*?-->/g, '');
            data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g, '');
            data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g, '');
            data = data.replace(/<script.*\/>/, '');
            data = data.replace(/<img[^>]*>/g, '');
            return data;
        }
        doAjax('link');
    });

现在我有一个重新加载整个页面的按钮,但我只是想重新加载AJAX请求。这甚至可能吗?

编辑:我需要指定更多。虽然它可以轻松再次调用AJAX,它是否也可以替换已存在的信息?

2 个答案:

答案 0 :(得分:2)

您只需要在按钮单击...

上再次调用doAjax函数
$("#buttonID").on("click", function() {
    doAjax("link");
});

将其添加到上面的document.ready代码中并相应地设置按钮ID。

然后改变

container.append(justTable);

container.html(justTable);

答案 1 :(得分:2)

doAjax函数中,将HTML附加到元素上。如果您覆盖元素的HTML而不是附加到HTML,那么每次doAjax函数运行时都会“刷新”HTML:

简单地改变:

container.append(justTable);

要:

container.html(justTable);

当然,您可以将click事件处理程序绑定到链接(或任何元素),就像其他答案所示。确保将click事件绑定在适当的范围内(document.ready事件处理程序内),以便可以从doAjax事件处理程序访问click函数。