因此,我從MVC3操作加載一些數據,返回Json,包含一些參數和內容作爲字符串。我將內容添加到某個div。在部分視圖中,我有一個document.ready JQuery事件。出於某種原因,該函數在添加內容之前執行,並且所有在ready函數中聲明的選擇器都是空的。
這是否有邏輯原因?我是否設置了超時選擇器查看元素。但是超時可能非常不準確。
有什麼建議嗎?
謝謝!
示例代碼小提琴:http://jsfiddle.net/aKxy7/
因此,我從MVC3操作加載一些數據,返回Json,包含一些參數和內容作爲字符串。我將內容添加到某個div。在部分視圖中,我有一個document.ready JQuery事件。出於某種原因,該函數在添加內容之前執行,並且所有在ready函數中聲明的選擇器都是空的。
這是否有邏輯原因?我是否設置了超時選擇器查看元素。但是超時可能非常不準確。
有什麼建議嗎?
謝謝!
示例代碼小提琴:http://jsfiddle.net/aKxy7/
我結束了編碼的是等待,直到通過AJAX加載HTML所選元素已準備好方法。
這聽起來像你期望$(document).ready()
火裝載畢竟資產產生。這不是$(document).ready()
的工作原理。它在DOM完成渲染時觸發。而已。這聽起來像你想使用$(window).load()
,其中確實等到所有資產都加載。
$(window).load()函數在AJAX請求中不會觸發,因爲我沒有執行整頁回發。 – 2011-04-05 17:53:59
提示:$(window).load()從版本1.8棄用。 – robsch 2016-04-28 10:02:56
$(document).ready()
當HTML!被加載。這意味着如果您的HTML加載了一些可以更改HTML DOM的JavaScript,那麼在此之前會調用這些$(document).ready()
。
你應該確保你的函數最後被調用或使用setTimeout
自稱調用自己,直到你需要的元素全部被加載。
在$(document).ready函數可以調用jQuery的 $阿賈克斯或 $ .getJSON 從服務器上得到答案。然後你可以在你想要的地方注入json響應。沒有的setTimeout需要
我無法使用該解決方案,因爲這些JS庫在MVC中不可用。 – 2011-04-05 21:25:22
首先,
var elementIWannaGet = $('html-content-div');
應該
var elementIWannaGet = $('#html-content-div');
然而,你可能是什麼更好做是分開的內容腳本,因爲DOM已經加載...
考慮改變對此的響應:
{ result: true,
data: { id: '1' },
elementId: '#html-content-div',
content: '<div id="html-content-div">Html content! :D</div>'
}
,然後改變你的contentLoaded處理程序如下:
function contentLoaded(response) {
if (response.result == true)
handleError(response);
// Get the container where the response.content will be rendered to.
var targetContainer = $('#target-container-id');
// Append the content
targetContainer.append(response.content);
// Do something with your container
alert($(response.elementId).html().length);
}
我知道這是一箇舊的答案,但你能提供一個代碼片段嗎? – 2017-02-06 14:56:48