2009-11-07 40 views
0

據我所知,JQuery的負載()函數檢索一個文件,並且可以執行的quivelent:在它從JQuery的AJAX返回對象選擇內容

$('#somecontenttograb').html() 

。我想知道該怎麼做......實質上,我想使用JQuery異步下載網頁,然後從中獲取元素並將它們插入到我自己的文檔中的不同位置。我認爲.ajax調用在這裏是好的,但我無法理解返回的對象 - 我相信傳遞給成功函數的參數可能會將元素拉出來,但是怎麼做呢?

謝謝,

馬特。

已經嘗試了下面兩個答案中發佈的代碼,我已經嘗試過這一點,雖然我可以使用警報來顯示傳遞給ajax()調用的url並且調用成功函數,但如果我提醒$(result).find('#content')只有null出現在警報中。如果我把第一個警報的url放到瀏覽器中,我會返回一個有效的頁面。可能會出現什麼問題?

Matt。

回答

2

UPDATE

在回答你留在其他答案的評論,我只是想確保我瞭解清楚情況:

  • 你從本地主機測試,而不是從本地硬盤驅動器(也就是說,您的瀏覽器中的URL包含「http://localhost」,而不是硬盤上的某個位置)
  • 當您製作AJAX響應時,alert(...) - 結果爲null或其他等效項。
  • 該URL有效,可以在瀏覽器中加載。
  • 您所請求的網址與原始網頁位於同一網域。

如果這些事情都是真的,那麼我會嘗試以下方法做一些故障排除:

  1. 使用Firefox並安裝Firebug的(我們需要這個來決定AJAX請求失敗,爲什麼)
  2. 使用Firebug's console
  3. 使用jQuery的ajax(...)方法,你的代碼包含some logging,幷包括一些日誌代碼,看看發生了什麼事處理失敗。如果您所在的頁面不需要對失敗請求進行可視響應,並且您使用的是Firebug,則可以避免此步驟。

下面的代碼,我會用這個:

$.ajax({ 
    url: "http://stackoverflow.com/", 
    success: function(html) { 
     var responseDoc = $(html); 
     // Output the resulting jQuery object to the console 
     console.log("Response HTML: ", responseDoc); 
    } 
    // Handle request failure here 
    error: function(){ 
     console.log("Failure args: ", arguments); 
    } 
}); 

如果您發佈的Firebug日誌的輸出,它應該更容易找出問題,併爲您找到一個解決方案。 Firebug還記錄了XMLHttpRequests,這樣你就可以準確地看到發送到服務器和從服務器發送的內容,如果Firebug返回某種服務器錯誤(這就是你如何避免#3列出的事情以上)。


你可以使用ajax(...)方法,但它會更容易使用get(...)有一個回調,就像這樣:

​​

responseDoc將是一個jQuery對象,你可以用它來提取元素和像對待任何其他jQuery對象一樣對待。您可以使用jQuery manipulation方法從responseDoc中提取內容並以任何您想要的方式將其添加到主文檔中。

如果您需要$.ajax(...)方法提供的額外功能,您可以使用以下代碼。

$.ajax({ 
    url: "http://stackoverflow.com/", 
    success: function(html) { 
     var responseDoc = $(html); 
    } 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     // Handle errors here 
    } 
}); 
0

如果您請求的URL返回HTML中你可以使用它選擇:

$.ajax({ 
    url: '/test.html', 
    success: function(result) { 
     // select an element that has id=someElement in the returned html 
     var someElement = $(result).find('#someElement'); 
     // TODO: do something with the element 
    } 
}); 
+0

請參閱我的編輯關於從find()調用沒有收到有效的返回。 – 2009-11-07 19:50:05

+0

我試過你的代碼樣本,它包含一個純粹的html文檔,其中包含id ='someElement'的一個div,並且無法獲得任何警告但是null或object [Object]。你可以添加一些解釋如何使用find()調用返回的對象嗎? – 2009-11-07 21:53:20

2

如果有問題的網頁住在不同的服務器上,您將無法使用任何由於相同原始策略的問題,AJAX可以訪問返回的html。通過AJAX從另一臺服務器獲得的唯一數據類型是JSONP。這使用腳本標籤來加載數據並使用JavaScript回調進行操作。處理另一個站點的另一種方式是讓你的服務器代理請求,即你在你的服務器上調用一個方法,然後再爲你執行實際的請求。

如果你正在訪問同一個服務器,那麼我會建議設置一些服務器方法來返回你想要在頁面上注入的HTML,而不是加載和解析整個頁面以獲得一些元素。

+0

爲了澄清,我訪問的所有頁面都在我自己的服務器上(當前是開發包)。例如,包裝我希望下載和插入的元素的唯一內容是標準和標籤。我知道你的意思是,即使是那些應該被刪除,以便我想插入的內容是唯一的東西在網頁上,但我想撥打一個電話,並獲取內容,我可以拉開,在JavaScript中,和插入各個地方,以提高效率。 – 2009-11-07 22:13:59