2012-01-11 220 views
1

我使用jQueryYQL来获取网站的内容,并在页面上显示某个元素,在此例中为table元素。我也有使用jQuery QuickSearch插件设置的搜索功能。AJAX加载内容后加载脚本?

这个伟大的工程,现在的问题...

看来,搜索脚本加载AJAX内容的getter获取内容之前。我认为脚本会缓存数据,以便搜索更容易。由于它在内容存在之后加载,它不搜索任何内容,并且不起作用。有没有什么办法加载搜索脚本AFTERAJAX内容被加载?

我已经试图通过在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> 

回答

0

“如果。就绪()的DOM之后被称为已初始化,新的处理程序传递将立即执行。” - http://api.jquery.com/ready/

编辑

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

负荷后

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

你可以做后追加

container.append(justTable); 
callSearchFunction(); 
+0

我试图解释这是什么意思。我应该首先调用'.ready()',然后调用AJAX,然后搜索将在AJAX加载后加载? – Charlie 2012-01-11 01:33:57

+0

这意味着如果你正在调用体内脚本中的.ready()函数,那么它立即运行,应该从头开始运行。 – 2012-01-11 02:35:02

+0

这两个脚本都在头上。 – Charlie 2012-01-11 02:38:20

11

不知道我真正的问题,但要加载脚本的内容加载使用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'); 
    }); 
    } 
}); 
+0

不要你什么地方?我要细化答案更清晰:d – Charlie 2012-01-11 01:45:51

+0

此外,添加到这个..我没有收到来自本地页面的内容。这会将URL传递给YQL,然后获取页面内容并剥离除“table”标签之外的所有内容。我不确定语法是什么,因为它只是一个'ajax'请求,如果这是有道理的话。 – Charlie 2012-01-11 02:42:28

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

你可以传递一个匿名函数像jQuery的方法.load()

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

该函数将执行参数的Ajax请求完成时