2011-08-03 15 views
0

我有一個Django應用程序,主要內容經常通過AJAX加載進行更改。由於我需要在新加載的內容上運行大量JavaScript,因此我現在要做的就是在加載的HTML模板的末尾包含一個包含多個document.ready和其他函數的JavaScript塊。如何將JavaScript插入AJAX Django應用程序?

這是在AJAX加載內容上加載JavaScript的正確方法嗎?如果我用新的(AJAX加載的)HTML +腳本替換內容塊,舊腳本是否會被徹底刪除?

是否有監測工具來檢測JavaScript /內存使用情況?我遇到了一些頁面崩潰,所以我懷疑有一些泄漏發生。

謝謝!

回答

0

你一定要考慮使用.live()而不是包括加載HTML內容中的新的JavaScript塊:

http://api.jquery.com/live/

從文檔:

的.live()方法能夠以影響通過使用事件委託將尚未被添加到DOM的元素 :處理器綁定 到祖先元素負責觸發的事件在其後裔 。

+0

我已經廣泛使用.live()。我還需要執行腳本時,新的內容負載(即的document.ready) – sxv

+0

hmm..couldn't你執行這些腳本作爲加載內容的腳本成功功能的一部分? –

+0

成功函數是否等到所有數據完全加載或僅在它看到數據已返回之前等待? – sxv

0

恕我直言,你應該避免插入JavaScript代碼到AJAX加載頁面元素。這不是他最好的辦法。 爲什麼你不能製作一個JavaScript函數並在AJAX完成加載後激活它?或把它點擊或懸停事件......

的JavaScript的onClick:

<a class="orange" 
    onclick="return voteClick(this, '{{ item.pk }}', '1', '{% url ajaxvote %}')" 
    href=''>Button text</a> 

,然後在你的腳本:

function voteClick(self, pk, multiplier, url){ 
    //some actions function makes 
    //for e.g. making POST or changing DOM 
    // you can use vars that are generated by django template system 

    return false; 
}; 

jQuery的方式:

$.post(url, { param1: value1, param2: value2 }, function(data){ 
     //some function actions upon your AJAX complete 
     //call your function with code here 
     // you can load some 'data' for this script from django 
     // and not the whole script 
     voteClick(self, value1, value2, data); 
     return false; 
    } //end function 
);//end POST 

ou可以閱讀更多關於此:jQuery POST

所以這裏主要的想法是,你必須加載腳本從您MEDIA_ROOT靜態內容,並將它傳遞一些必要的參數。使用live()函數加載腳本是一種很難的方法。你必須注意追蹤很多功能和參數。

當然,如果您使用jQuery,使用它的選擇器很容易跟蹤代碼事件。但是,再次...爲什麼你需要使用AJAX請求加載代碼?這絕對是在這裏使用的靜態文件,如腳本文件...

相關問題