2012-03-10 11 views
0

私はHTTP経由でデータベースを呼び出しています。私のアプリケーションと同じサーバー上にないので、JSONPを使用しています。私のデータベースから情報を照会するたびに、JavaScript関数は別のスクリプトタグをDOMツリーに追加します。私のアプリケーションがしばらく実行されているとき、ソースコードにはSCRIPTタグがあふれています。JSONPで通話するたびに新しいSCRIPTタグを作成する必要がありますか?

これはJSONPの使用を受け入れる必要があるのでしょうか、別の方法がありますか?

+0

これを行うには、確かに良い方法があります。いくつかのコードを投稿できますか? –

答えて

1

これはJSONPの問題です。完了時にonloadハンドラをscript要素に添付してクリーンアップすることができます(IEの場合はonreadystatechange)。

また、両方のサーバーを制御するため、CORSを使用できます。これはJSONPよりもハックが少なく、XMLHttpRequestの柔軟性を提供します。

1

ブラウザによって異なりますが、一般的にはyesです。新しいスクリプトタグを追加する必要があります。ただし、スクリプトがロードされた後、スクリプトdom要素を削除することはできます。 jQueryを使用している場合は、これを処理します。これを行うために使用する必要があるメソッドは、ブラウザによって多少異なります。

Visual Studioを使用している場合は、スクリプトが削除されているにもかかわらず、デバッガでスクリプトへの参照が引き続き表示されます。私が知る限り、生産モードでは、これは「リーク」があることを意味するものではありません。

+0

はい。 jQueryはこれをあなたのために処理し、使いやすいです。 –

0

JSONPレスポンスを受け取ると、scriptタグが削除されます。例:

function makeJSONPRequest() { 
    var script = document.createElement('script'); 
    var callbackName = 'callback' + (+new Date()) + '_' + Math.floor(Math.random() * 10000); 
    script.type = 'text/javascript'; 
    script.src = 'http://www.example.com/jsonp?callback=' + callbackName; 
    window[callbackName] = callback; 
    document.head.appendChild(script); 
    function callback(data) { 
     delete window[callbackName]; 
     document.head.removeChild(script), script = null; 
     console.log(data); 
    } 
} 
関連する問題