2016-02-26 74 views
0

我有一個局部視圖,像這樣:JavaScript函數沒有定義偏查看

@model Blah.Blah.ThisModel 

<script type="text/javascript"> 
    $.getScript("/Scripts/Pages/ReferralEdit.js"); 
    initReferralEdit(); 
</script> 

@* blah blah rest of view here *@ 

然後在我的ReferralEdit.js外部文件我有以下幾點:

console.log('external loading'); 

function initReferralEdit() { 
    console.log('function is here'); 
} 

當加載此作爲主路由(非Ajax),這工作正常。當通過Ajax加載,在檢查在頁面加載控制檯我得到如下:

Uncaught ReferenceError: initReferralEdit is not defined 
external loading 

所以,我知道該文件被加載,作爲第一個console.log()被燒成罰款,但功能似乎並不確實能得到的。

任何人都可以解釋爲什麼嗎? (以及爲什麼在external loading輸出之前在Chrome日誌中顯示錯誤?)我如何添加這些功能以使它們「註冊」或「處於正確的範圍內」,或者我錯過了什麼?

(我已經通過值得試圖找出如何加載JS上的局部視圖小時,我總是停留在不被定義這些功能...)

+1

因爲'initReferralEdit();'在腳本加載之前調用(ajax是異步)。喲使它的工作,在成功回調中調用'initReferralEdit()' –

+0

我今天已經太長了......'$ .getScript('/ Scripts/Pages/ReferralEdit.js',function(){initReferralEdit );});' - 那就行了。把你的評論變成一個答案,我會標記它。 – jleach

+0

TeaCode已經添加了一個:) –

回答

2

你需要做確保文件在嘗試調用其中的任何方法之前完全加載。嘗試如下所示:

$.getScript("/Scripts/Pages/ReferralEdit.js") 
    .done(function(script, textStatus) { 
    initReferralEdit(); 
    }) 
    .fail(function(jqxhr, settings, exception) { 
    console.log('failed to load script'); 
}); 
+0

謝謝,現在明白了。等待期結束後,我會將其標記爲答案。 – jleach