2012-03-15 121 views
1

我想從另一個 js文件調用外部js文件。這裏是我的代碼: 「FUNC2沒有定義」調用外部js文件

file1.js

function func1(id){ 
var NewScript= document.createElement('script') 
NewScript.src="file2.js" 
document.body.appendChild(NewScript); 
func2(id); 

} 

file2.js

function func2(id) 
{ 
    alert("im here " +id); 

} 

但是,當我跑了它給了 我在做它對?

有人可以幫我嗎?

感謝

+0

這是一個假設的例子,你正在嘗試,它不工作,或者這是你的真實代碼?因爲如果你的文件很大,你需要等待瀏覽器加載新的JS文件。 – Strelok 2012-03-15 06:19:28

+0

這不是真正的代碼,我更改了文件名和file2.js,是的有點大.. – tinks 2012-03-15 06:21:08

+1

檢查此:http://stackoverflow.com/questions/950087/include-javascript-file-inside-javascript-文件 – 2012-03-15 06:21:11

回答

1

你必須等待腳本實際加載/解析。 .appendChild會立即返回,您的代碼將繼續運行,可能在瀏覽器有機會獲取新腳本之前很長時間。

從.appendChild()移動到FUNC2()中的代碼很可能是毫或微秒,而獲取的腳本可能是整個秒,這取決於如何有損/ laggy網絡當時行事。

+0

感謝您的!你是對的,我應該等待之前加載..我跟着Sudhir提供的鏈接的答案!多謝你們! – tinks 2012-03-15 06:43:56

0

import1.js:

var a = function() { 
    console.log('function a'); 

    this._require(function(){ 
     b(123456); 
    }); 
}; 

a.prototype._require = function (callback) { 
    var xhr = new XMLHttpRequest(); 

    xhr.onload = function (e) { 
     var script = document.createElement('script'); 
     script.innerHTML = e.target.responseText; 
     document.getElementsByTagName('head')[0].appendChild(script); 
     callback(); 
    }; 

    xhr.open('GET', 'import2.js', true); 
    xhr.send(); 
}; 

new a(); 

import2.js:

var b = function (id) { 
    console.log(id); 
}; 

結果:

**result**