2016-09-09 89 views
0

什麼這是一個簡單的疑問: 當我們使用類似$('#content').load("page.php #content");,它加載整個page.php「服務器端」,然後提取#content元素,或者只加載指定的元素?阿賈克斯.load檢索來自服務器

除此之外,這是$('#content').load("page.php #content");與此相同:

$.ajax({ 
    url:"page.php", 
    type:'GET', 
    error: function(){ 
     alert("Oops!"); // Em caso de o AJAX dar erro (opcional) 
    }, 
    success: 
    function(data){ 
     $('#content').html($(data).find('#content').html()); 
    } 
}); 

當談到「方法來從服務器獲取」?

+0

[可能重複(http://stackoverflow.com/questions/18938180/how-to-get -html-of-div-on-another-page-with-jquery-ajax) –

+0

不,與這個問題無關。我的懷疑不是關於如何做某事,而是如何做一些事情。 – Malork

回答

2

是的,這些都是一樣的,XMLHttpRequest無法加載部分頁面。
jQuery將url和給定的選擇器分開,然後根據url加載整個頁面,然後使用find()將基於傳入選擇器的給定元素作爲過濾器提取。

這裏是jQuery的load()的縮短(稍作修改)版本,只是爲了顯示它是如何工作

function(url, params, callback) { 
    var selector, div, html, self = this; 

    // if the url param contains a space, get the selector to use as filter 
    if (url.indexOf(" ") > -1) { 
     selector = jQuery.trim(url.slice(url.indexOf(" "))); 
     url = url.slice(0, url.indexOf(" ")); 
    } 

    // make regular ajax call 
    jQuery.ajax({ 
     url  : url, 
     type  : "GET", 
     dataType : "html", 
     data  : params 
    }).done(function(responseText) { 
     div = jQuery('<div>'); 
     html = jQuery.parseHTML(responseText); 

     self.html( div.append(html).find(selector)); 
    }); 

    return this; 
} 
+0

值得注意的是,'#'及其後的所有內容永遠不會傳遞給服務器。 – mcfedr

+0

謝謝,那是我正在尋找的解釋:) – Malork