0

最もダミーの方法でグローバル変数にデータを取得しています。この時点で:

var tranlationJson =
  $.ajax({
     type: "GET",
     url: "translation.xml",
     contentType: "text/xml",
     dataType: "xml",
     success: function (dataSource) {            
        tranlationJson=ToJasonParser(dataSource);
     }
  });

そして、約束を使用するように変更したいと思います。問題は、次のコードがサードパーティのjsファイルを使用しているため、私のコードは次のようになることです

<script
<script

var tranlationJson  = $.ajax({ ...

<script 111
<script 222

スクリプト 111 と 222 には、translationJson を使用するカスタム ライブラリが含まれています。では、スクリプトをロードする前に translationJson が満たされるようにするにはどうすればよいですか?

4

1 に答える 1

0

任意のスクリプトから到達できるグローバル変数があります: window. あなたの代わりにvar translationJson = $.ajax({...行うことができますwindow.translationJson = $.ajax({...。しかし、ここで重要なことが 2 つあります。

まず、何が最初に来るかわからないということです: ajax リクエストが終了したか、スクリプトの一部がすでに変数を要求しています。解決策は、実行中の変数スクリプトに依存するすべてを$.ajax({ success:コールバックにバインドすることです。このような:

$.ajax({
         type: "GET",
         url: "translation.xml",
         contentType: "text/xml",
         dataType: "xml",
         success: function (dataSource) {            
            tranlationJson=ToJasonParser(dataSource);
            someScriptRun(); /* here you run some depending on your variable script */
         }
    });

別の方法は、次のようにすべての依存スクリプトで変数を確認することです。

var periodicalAttemptToRunScriptDependant = setInterval( function(){
  if( 'object' == typeof window.translationJson ){
    someScriptRun(); /* here you run some depending on your variable script */
    clearInterval( periodicalAttemptToRunScriptDependant );
  }
}, 1000 );

2番目:あなたの例では、実際には変数ではなく関数であるため、変数に対するリクエストはajaxリクエストを引き起こします。コードを次のように変更してみてください。

var tranlationJson;
$.ajax({
     type: "GET",
     url: "translation.xml",
     contentType: "text/xml",
     dataType: "xml",
     success: function (dataSource) {            
        tranlationJson = ToJasonParser(dataSource);
     }
});
于 2013-04-29T15:22:24.493 に答える