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({...。但这里有两件重要的事情:

首先是你不知道什么会先出现: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 );

第二:在您的示例中,对变量的任何请求都会导致 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 回答