如何从ajax加载全局变量得到promises

时间:2013-04-29 14:50:19

标签: javascript ajax loading

我以最虚拟的方式将数据传递给全局变量。目前:

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

我想修改它以使用promisses。问题是后面的代码是使用第三方js文件,所以我的代码就像

<script
<script

var tranlationJson  = $.ajax({ ...

<script 111
<script 222

和脚本111和222包含将使用其中的translationJson的自定义库。那么如何确保在加载脚本之前填充translationJson?

1 个答案:

答案 0 :(得分:0)

您可以从任何脚本访问全局变量:window。您可以var translationJson = $.ajax({...代替window.translationJson = $.ajax({... $.ajax({ success:。但这里有两件重要的事情:

首先,你不知道首先会发生什么:ajax请求已经完成或者你的一些脚本已经要求你的变量了。解决方案是将所有运行的变量脚本绑定到$.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 );

另一种方法是检查所有相关脚本中的变量,如下所示:

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

第二:在您的示例中,对变量的任何请求都将导致ajax请求,因为它实际上不是变量而是函数。尝试将您的代码更改为:

{{1}}