并发AJAX回调:如何同步它们
Concurrent AJAX callbacks: how to synchronize them?
我的应用程序通过AJAX/JSONP加载HTML和JavaScript,而不是以标准方式加载页面。它在Iframe中工作,因此,它是与父Frame保持通信的正确方式(Safari限制)。
我必须提出两个请求:为自定义页面加载JavaScript和HTML。为了确保一切正常,我可以首先加载JavaScript,然后加载HTML(在JavaScriptonload回调中)。但我希望这两个请求同时发送。
我准备了代码。当JavaScript和HTML都已加载时,脚本必须调用_finishLoad()。函数_finishLoad()是否可能不会在浏览器中执行?
function Loader()
{
this.load = function()
{
// ...some code here...
var this_ = this;
var jsLoaded = false;
var htmlLoaded = false;
$.ajax(
url: newUrl,
dataType: "jsonp",
jsonpCallback:
function()
{
$.ajax(
url: someUrl,
dataType: "html",
success:
function( data )
{
$( '#' + contentElId ).html( data );
if( htmlLoaded )
{
this_._finishLoading()
}
jsLoaded = true;
}
);
}
);
$.ajax(
{
url: someUrl2,
dataType: "html",
success:
function( data )
{
$( '#' + contentElId ).html( data )
if( jsLoaded )
{
this_._finishLoading()
}
htmlLoaded = true;
}
}
);
}
}
更新。
我需要加载JavaScript,HTML然后调用onload()来初始化加载的JavaScript如果你知道更方便的方法,请单独加载,请告诉我。
考虑使用$.when()函数
代码应该是这样的:
var this_ = this;
var jsLoaded = false;
var htmlLoaded = false;
var deferred = $.Deferred();
$.ajax(
url: newUrl,
dataType: "jsonp",
jsonpCallback:
function()
{
$.ajax(
url: someUrl,
dataType: "html"
success: function(){
deferred.resolve();
}
);
}
);
var promise2 = $.ajax(
{
url: someUrl2,
dataType: "html",
}
);
$.when(deferred, promise2).done(function(a1, a2){
$( '#' + contentElId ).html(a1);
$( '#' + contentElId ).html(a2);
this_._finishLoading()
});
相关文章:
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 主干网.与Safari同步问题
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 是否同步加载了LINK元素
- 异步获取数据使用JavaScript同步获取数据
- 以同步方式获取Javascript Promise的值
- ajax调用获胜't同步执行
- javascript函数中的异步与同步.(Node.js)
- 如何同步写入process.stdout
- JavaScript 函数同步执行
- HTML5应用程序数据库同步
- 浏览器同步不同步滚动
- 如何判断Meteor minimongo何时与mongo服务器同步