AJAX加载内容后加载脚本?

时间:2012-01-11 01:21:52

标签: jquery ajax load

我正在使用jQueryYQL来获取网站的内容并在页面上显示某个元素,在本例中为table元素。我还使用jQuery QuickSearch插件设置了搜索功能。

这很有效,现在解决了这个问题...

似乎在AJAX内容getter获取内容之前加载搜索脚本。我认为该脚本然后缓存数据,因此搜索更容易。因为它是在内容存在之后加载的,所以它不搜索任何东西而且它不起作用。有没有办法加载搜索脚本 AFTER 加载AJAX内容?

我已经尝试通过jQ中的ready函数调用它:

$(document).ready(function() {

但是在内容加载之前仍然会加载。我的AJAX脚本如下:

<script type="text/javascript">
    $(document).ready(function () {
        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);
                    } 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('url_goes_here');
});
</script>

3 个答案:

答案 0 :(得分:12)

不确定我是否真的得到了这个问题,但是在内容加载Ajax之后加载脚本你可以这样做:

$.ajax({
  url: url,
  data: data,
  success: function() {
     //success loading content
  },
  error: function() {
    //error loading content
  },
  complete: function() {
     $.getScript("/scripts/mysearchscript.js", function() {
          alert('loaded script and content');
     });
  }
});

答案 1 :(得分:0)

“如果在初始化DOM之后调用.ready(),则会立即执行传入的新处理程序。” - http://api.jquery.com/ready/

修改

我想我可能误解了你的问题,对不起。你是说搜索尝试在表完全加载之前搜索?我认为你在页面完成加载之前尝试搜索。您是否尝试使用附加到.load()的回调函数,或者只是在container.append()之后?

加载后

$('#content').load(url,callSearchFunction());

你可以在追加

之后更简单地做到这一点
 container.append(justTable);
 callSearchFunction();

答案 2 :(得分:0)

$('.container').load('yourPage.html',function(){          
    //Do whatever you want here              
});

您可以在jquery方法.load()

上传递一个类似参数的匿名函数

http://api.jquery.com/load/

当ajax请求完成时,该函数将执行