Javascript 如何使用Promiss从ajax get加载全局变量
我以最虚拟的方式将数据传输到全局变量。目前:Javascript 如何使用Promiss从ajax get加载全局变量,javascript,ajax,loading,Javascript,Ajax,Loading,我以最虚拟的方式将数据传输到全局变量。目前: var tranlationJson = $.ajax({ type: "GET", url: "translation.xml", contentType: "text/xml", dataType: "xml", success: function (dataSource) { tranlationJson=ToJasonParser(dataSourc
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
您可以从任何脚本访问全局变量:窗口
。您可以使用window.translationJson=$.ajax({…
)代替var 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);
}
});
我一点也不理解第二部分。按照目前的安排,您无法确保变量已设置。要实现所需,您必须在AJAX请求的成功回调中构造稍后的脚本标记。使用:success:function(数据源)是否是一种好方法{translationjson=ToJasonParser(数据源);$.getScript(“test.js”);}并在其中加载2-3个脚本?如果您仅在ajax调用完成后才开始下载脚本,那么与几乎同时下载所有脚本但按照我建议的方式定义一系列运行脚本相比,可能需要更多的时间。因此,getScript的工作时间会更长。