Asynchronous jquery - ajax when().then();
Asynchronous jquery - ajax when().then();
我一直在努力阅读文档,但我很难理解一些概念:
$.when(function(){
$.ajax({url:'php/Mostrarphp.php', type:'post',data: {queHacer:"MostrarUsuarios"}})
.then(function(success) {
$("#main").html(success);
},function(error) {
$("#main").html(error);
});
})
.then(function() {
console.log("test");
});
我要做的是让第一个函数进入PHP文件,在该文件中只有一个包含到另一个文件。之后,我想要显示控制台日志。(这只是练习,当我需要运行检索数据的函数,将花费更长的时间)。
这里的问题是echo没有显示在应用程序上,只显示在然后(console.log("test")
)上解决的内容。
让这个执行内部函数然后执行第二个函数的正确方法是什么?
当您使用$.when
时,您正在创建一个新的承诺,一个需要解决的承诺。通常,$.when
用于将多个承诺"组合"为一个,然后在所有解决后运行一个函数。
你传递给$.when
的只是一个函数。一个永远不会运行的函数。来自文档:
如果一个参数被传递给
jQuery.when()
,并且它不是Deferred或Promise,它将被视为已解决的Deferred,并且任何附加的doneCallbacks将立即执行。
所以,这意味着你的console.log("test");
运行,但你的AJAX代码从来没有运行。
你不必在这里不使用$.when
。$.ajax
已经返回承诺,没有必要再做一个。链接 .then()
调用。
$.ajax({
url:'php/Mostrarphp.php',
type:'post',
data: {queHacer:"MostrarUsuarios"}
}).then(function(success){
$("#main").html(success);
},function(error){
$("#main").html(error);
}).then(function(){
console.log("test");
});
编辑:在评论中你说:
[无论]内部执行需要多少时间才能完成,外部[应该]总是执行第二个
如果这是你想要的,那么你将需要创建另一个承诺。您可以这样做,然后在"内部"函数完成后进行解析。我建议将AJAX代码包装在一个函数中,并让它返回一个可以附加回调的承诺。
function ajaxCall(){
var d = new $.Deferred;
$.ajax({
url:'php/Mostrarphp.php',
type:'post',
data: {queHacer:"MostrarUsuarios"}
}).then(function(success){
setTimeout(function(){
$("#main").html(success);
d.resolve();
}, 2000);
},function(error){
$("#main").html(error);
d.reject();
});
return d.promise();
}
ajaxCall().then(function(){
console.log("test");
});
相关文章:
- jQuery.when()在循环中被忽略
- Javascript:If-then语句在函数中不起作用
- 为什么$.when().pipe().then()有效,而$.when
- 运行Promise.all()中的When-is-then-then子句
- 如何与 JQuery WHEN 和 THEN 同步两个骨干获取调用
- 为什么我的 jQuery when().then() 函数在 ajax 请求完成之前触发
- $.when( 2 conditions ).then(function(){});
- 将错误控制添加到.when.then和xdr请求
- 在具有固定链尾调用的循环中链接jquery.when().then()
- Using jQuery .when .then
- 类似于jQuery when/then的东西:带break的延迟执行
- jQuery$.when().then()对我不起作用
- 使用$.when()和.then基于$.getJSON响应更新数组
- 等待所有异步ajax调用完成,并延迟.when().then(),未调用then()中的任务
- JQuery.when()和then()不能处理异步事件
- When可以使用.then来使用当前返回的值
- Asynchronous jquery - ajax when().then();
- 在使用$.when().then()函数时遇到问题
- jQuery 3.1.0 then(), done()和when()错误处理
- 多个when() then()延迟对象链