0

いくつかの geojson データをロードするには、スクリプトを外部ドメイン (たとえばhttp://www.stat.ucla.edu/~jeroen/files/la_county_simplified.min.json. このスクリプトの内容を制御することはできません。私が知っているのは、URL と、関心のあるスクリプトで定義されたオブジェクトの名前だけです。スクリプトのダミー バージョンは次のようになります。

var my_data = {"foo" : 123, "bar" : 456}

私のアプリケーションでは、my_dataオブジェクトをその URL から動的にロードしたいと考えています。クロスドメインなのでajaxは使えません。jsonp私のスクリプトは関数ではなくオブジェクトを定義しているため、どちらもそうではありません。<script>1 つの方法は、単に現在のドキュメントの先頭にとして挿入することです。ただし、副作用の可能性は避けたいと思います。

よりクリーンなソリューションは何でしょうか? <iframe>を作成してから iframe にタグを挿入し<script>、iframe が読み込まれたらオブジェクトを抽出することを考えていました。ただし、これがクロスブラウザーで機能する信頼できる方法であるかどうかはわかりません (特に、スクリプトが iframe に読み込まれた後にオブジェクトを抽出するためにコールバックをバインドする場合)。

クリーンなページにスクリプトをロードし、特定のオブジェクトのコピーをメイン ページに抽出するためのライブラリまたは標準ソリューションはありますか? 私はすでにjQueryに依存しているので、それで問題ありません。

4

4 に答える 4

2

この純粋なクライアント側を実行する予定で、データをフォーマットできない場合は、ひねりを加えた JSONP を使用できます。コールバックに合わせてデータを変更する代わりに、データに適応するようにローダーを再調整します。

スクリプトの をリッスンしonloadます。スクリプトが読み込まれると、変数はグローバル スコープにあるはずです。コールバックを実行すると、そのグローバル変数がコールバックに渡されます。

//your script loader
function loadData(url,varName,callback){

  var script = document.createElement('script');
  document.getElementsByTagName('head')[0].appendChild(script);

  //when the script loads, we pass in `window.my_data`
  script.onload = function(){
    callback.call(this,window[varName]);
  };
  script.src = url;

}

//using it
loadData('http://example.com/somefile.js','my_data',function(data){
  //executes when script is loaded, where data is `my_data`
});

このアプローチの欠点は、スクリプトをロードするたびにグローバル スコープにロードすることになり、衝突が発生する可能性があることです。

于 2013-04-22T23:52:55.103 に答える
0

新しいスクリプトタグでスクリプトをロードする必要があるのと同じオリジンポリシーを破る必要があるため、これを回避する方法は他にありません.JSONPもこの方法で機能しますが、jqueryはそれを隠します.

それまたはサイトにcorsヘッダーがあります。サイトにcorsヘッダーがない場合は、データをロードする方法を次に示します(jsonp形式ではないため、jsonpを使用しません):

function loadJS(url){
  var s=document.createElement("script");
  s.src=url;
  $(s).on("load",function(){
    console.log("var abvailable");//do something with the variable here
    $(s).remove();
  });
  document.head.appendChild(s);
}
loadJS("http://code.jquery.com/jquery-1.9.1.min.js");
于 2013-04-23T00:08:16.043 に答える
-1

JSON-P は、リモート ドメインから JavaScript をロードする方法です。

JavaScript の戻り形式は、応答データをパラメーターとして関数を呼び出すことです。

someGlobalFunctionName({/* your response data */});

function someGlobalFunctionName(data) { /* do something with data */ }

データはオブジェクトに含まれており、関数に渡されるため、グローバル関数自体以外のグローバル リークは避けられません。

詳細: http://json-p.org/

于 2013-04-22T23:50:34.303 に答える