2012-01-12 55 views
2

有沒有辦法重新加載AJAX請求,以便更新下面代碼中從外部網站提取的內容?通過鏈接重新發送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

你只需要在點擊按鈕再次調用該函數doAjax ...

$("#buttonID").on("click", function() { 
    doAjax("link"); 
}); 

添加到這上面的document.ready代碼和相應的設置按鈕ID。

然後改變

container.append(justTable); 

container.html(justTable); 
+0

有什麼辦法可以代替已經存在的信息嗎?對不起,我應該在操作中指定更多。 – Charlie 2012-01-12 20:34:05

+1

而不是container.append(justTable)做container.html(justTable) - 它將替換任何現有的數據。 – Archer 2012-01-12 20:36:23

+0

注意:'.on()'在jQuery 1.7中是新的,在這種情況下與'.bind()'是一樣的。 http://api.jquery.com/on – Jasper 2012-01-12 21:10:36

2

在你doAjax功能您將追加到HTML元素。如果覆蓋,而不是附加給它那麼HTML就會被「刷新」每個doAjax函數運行時間元素的HTML:

簡單的改變:

container.append(justTable); 

要:

container.html(justTable); 

而且當然,您可以將一個事件處理程序綁定到鏈接(或任何元素),如其他答案所示。確保您將click事件綁定在適當的範圍內(在document.ready事件處理程序中),以便可以從click事件處理程序訪問doAjax函數。