在另一个函数完成后再调用一个函数
call a function after another function is completed
我正在尝试调用加载()完成后的另一个函数。我首先尝试使用alert()进行检查,但是,我在load()完成之前看到了警报。我能够在load()函数中成功加载内容。但是,alert()为空。
$(document).ready(function(){
load();
$.when(load()).done(function(){
alert((document.getElementById('item').innerHTML));
});
function load()
{
$("#item").load("/somepage.aspx", function (response, status, xhr){
if ( status == "error" ) {
var msg = "error: ";
$( "#error" ).html( msg + xhr.status + " " + xhr.statusText );
}
});
};
});
你需要load()
返回一个承诺,然后你把这个承诺传递给$.when
。
.load()
不返回一个承诺,它返回它被调用的jQuery集合(为了链接的目的)。你可以重写load()
使用$.get()
代替,它返回一个jQXHR
,实现Deferred
(这是jQuery的承诺类)。
var p = load();
$.when(p).done(function() {
alert($("#item").html());
});
function load() {
return $.get("/somepage.aspx", function (response, status, xhr){
$("#item").html(response);
if ( status == "error" ) {
var msg = "error: ";
$( "#error" ).html( msg + xhr.status + " " + xhr.statusText );
}
});
}
你实际上不需要使用$.when
,你可以直接写:
p.done(function() { ... });
您可以使用回调函数并将代码更新为
$(document).ready(function(){
load(function(){
alert((document.getElementById('item').innerHTML));
});
function load(callback)
{
$("#item").load("/somepage.aspx", function (response, status, xhr){
if ( status == "error" ) {
var msg = "error: ";
$( "#error" ).html( msg + xhr.status + " " + xhr.statusText );
}
if(callback) {
callback();
}
});
};
});
你可以使用在大多数主流浏览器中已经实现的新的Promises API。
var jsonPromise = new Promise(function(resolve, reject) {
// do a thing, possibly async, then…
if ( /* everything turned out fine */ ) {
resolve("Stuff worked!");
}
else {
reject(Error("It broke"));
}
});
jsonPromise.then(function(data) {
console.log(result); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
});
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么