2011-12-05 19 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に進まないplayUser関数。

+0

「test.js」にコードを表示してください。 – jfriend00

+0

あなたは行き​​ます。申し訳ありません。 :) –

答えて

1

test.jsで呼び出されるdisplayUser()が必要な場合は、それを呼び出すコードtest.jsが必要です。 URLに入れるだけで呼び出されることはありません。それをURLから解析して呼び出す必要があります。

あるいは、スクリプトの読み込みが完了し、ちょうどtest.jstest.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

私はあなたの答えに2つのオプションを追加しました。 – jfriend00

+0

ねえ、それは魅力のように動作します。どうもありがとう。 –

0

によって返されたスクリプト"http://www.sample.com/test.js?callback=displayUser"は実際には有効なjavascriptで、displayUserの呼び出しを含んでいなければなりません。

test.jsは、dispayUser()を呼び出す必要があります。

関連する問題