gpt4 book ai didi

javascript - Promise 和 Deferred 在 jquery 中不起作用

转载 作者:行者123 更新时间:2023-11-28 15:23:59 25 4
gpt4 key购买 nike

我试图在异步调用之后调用一个函数,但是在异步调用函数之后,正常函数不会触发,我不确定是什么阻止了它,请帮我弄清楚。我正在尝试学习延迟的概念并保证,不知道我错过了什么。 fiddle

$(document).ready(function(e) {
var form_data = $(this).serialize();
var form_url = $(this).attr("action");
var form_method = $(this).attr("method").toUpperCase();

$("form[ajax=true]").submit(function(e) {
e.preventDefault();
$("#loadingimg").show();
var promise = ajaxcall_function();
promise.then(somes1());



});

});
function somes1(){
alert("dd");
}
function ajaxcall_function(){
var deferred = $.Deferred();
$.ajax({
url: form_url,
type: form_method,
data: form_data,
cache: false,
success: function(returnhtml){
$("#result").html(returnhtml);
$("#loadingimg").hide();
deferred.resolve();
}
});
return deferred.promise();
}

最佳答案

您需要使用这个:

 promise.then(somes1);

而不是:

 promise.then(somes1());

您执行此操作的方式是立即调用该函数并将返回结果传递给 .then()。这显然不是你想要的。相反,您只想传递一个函数引用(只是不带括号的函数名称),以便稍后调用它。当您将 () 添加到函数名称末尾时,意味着立即调用它。

您还可以像这样简化 ajax 函数,以使用已从 $.ajax() 返回的 Promise,而不是创建自己的 Promise:

function ajaxcall_function(){
return $.ajax({
url: form_url,
type: form_method,
data: form_data,
cache: false
}).then(function(returnhtml) {
$("#result").html(returnhtml);
$("#loadingimg").hide();
return returnhtml;
});

}

ajaxcall_function().then(function(data) {
// code here
});

关于javascript - Promise 和 Deferred 在 jquery 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30023985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com