2011-12-05 53 views
1

如何正確使用回調函數導致它無法正常工作。 我想從服務器檢索我的json值到客戶端。url回調函數不能正常工作

對於初學者,我試過這看看它的工作。

示例代碼

的index.html

<button onClick = "Json()">Click Here</button> 

my.js

function Json() 
{ 
var url = "http://www.sample.com/test.js?callback=displayUser"; 
var script = document.createElement('script'); 
script.src = url; 
document.body.appendChild(script); 

} 

function displayUser(json) 
{ 
    alert("working"); 

} 

test.js

var obj = { "a": "hey", "b": "what?"} 

,但不會返回任何警告,所以我想它不會繼續我的dis玩用戶功能。

+0

請向我們展示'test.js'中的代碼。 – jfriend00

+0

你走了。對於那個很抱歉。 :) –

回答

1

如果你想在test.js中調用displayUser(),你必須在test.js的代碼中調用它。它不會因爲你把它放在URL中而被調用。您需要將代碼解析出URL,然後調用它。

或者,您也可以在腳本加載完成時掛上通知,並在test.js完全加載後自己從test.js以外自己呼叫displayUser()

要檢測外部腳本文件何時載入成功,並自己撥打displayUser(),請參閱this reference

如果你想從test.js腳本文件本身的回調值和test.js中執行它,這是我知道的唯一辦法做到這一點:

window.displayUser = function() { 
    // do whatever 
} 

var scripts = document.getElementsByTagName("script"); 
for (var i = 0; i < scripts.length; i++) { 
    var url = scripts[i].src; 
    // extract filename and callback parameter from the URL 
    var matches = url.match(/\/([^\/]+)\?.*callback=(.*?)(&|$)/); 
    if (matches && matches[1] == "test.js") { 
     // call the callback function 
     window[matches[2]](); 
    } 
} 
+0

啊,我明白了。現在我必須知道如何做到這一點。 –

+0

我給你的答案增加了兩個選項。 – jfriend00

+0

嘿,這就像一個魅力。非常感謝。 –

0

由返回的腳本「http://www.sample.com/test.js?callback=displayUser」實際上必須是有效的JavaScript幷包含對displayUser的調用。

test.js應該調用dispayUser()。