2012-07-11 97 views
0

我目前使用Jquery的.load()函數來異步插入頁面片段。在我加載頁面片段的URL中,我還設置了一個Javascript全局變量值(在腳本標記中)。使用Jquery .load()函數獲取變量和頁面片段

var loaded_variable = 'value1' 

有沒有一種方法,我可以使用.load()函數在頁面中插入片段和檢索loaded_variable值,像下面的代碼:

function loadProducts(url) { 
       $('#mainplace').load(url + ' #submain', function() { 
         current_variable = loaded_variable; 
       }); 
    } 

我知道腳本當選擇器表達式附加到URL時使用塊,所以如果.load()函數不起作用,我可以使用其他可以實現這一點的Jquery函數。

額外的信息:我加載的URL是用HTML和Python編寫的(Web2py);使用相同的Python變量來呈現頁面片段並設置loaded_variable值。

回答

1

如果您希望從頁面獲取片段並在其上執行腳本,則需要採用其他方法。這有點不方便,但有效。

$.ajax({url: 'fetch_page.html', dataType: 'text'}).done(function(html) { 
    var dom = $('<html />').prop('innerHTML', html); 
    $('body').append(dom.find('body p')); 
    $('head').append(dom.find('script')); 
}); 

從我們獲取的頁面獲取一個p標籤並將其插入到父頁面的body。它還執行抓取頁面中的任何腳本。

如果你想知道關於prop('innerHTML...位,這是因爲如果我使用jQuery的.html()方法,sanitises輸入字符串,所以我們沒有得到我們想要的結果。

我的第一個想法是一個文檔片段,但不能將HTML字符串插入到文檔碎片中 - 您必須通過DOM方法追加。即使在這種情況下,它也不會僅僅使用元素來解析dom(dom),因爲它沒有提供任何節省。

就像我說的那樣,這有點冒險,但是很有效。

+0

感謝您的迴應!你能解釋你的代碼的第二行嗎?我不明白選擇器'$'('')'是指 – mrl 2012-07-12 03:10:53

+0

我已經使用了你的響應,但是爲了執行Javascript,我使用'scripter = dom.find('script')。text(); eval(scripter);'而不是append方法,它不起作用。 – mrl 2012-07-12 19:07:55

+0

對不起 - 我剛纔看到這些評論。你所提問的那一行創建了一個新的'html'元素,並用它來存放你正在加載的HTML。最重要的是,這將其轉換爲DOM,因此使其可以穿越。 – Utkanos 2012-07-12 19:38:19