2012-01-11 133 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請求完成時