我有两个嵌套函数,如下所示:
var userhascompany;
$(document).ready(function(){
checkforcompany();
if (Object.keys(localStorage).length > 0) {
getaddjobcache();
}
});checkforcompany();函数如下所示:
$.ajax({
url: 'addjob_companycheck.php',
success: function(dataresponse) {
userhascompany = dataresponse;
}
}); 只有当变量getaddjobcache();有一个值,或者更确切地说,ajax请求已经完成时,才应该调用函数userhascompany。
发布于 2019-04-16 15:18:03
修改checkforcompany()以返回由$.ajax()创建的jqXHR,因为它实现了接口。我推荐使用jQuery 3.x for consistent promise behavior,但是如果您必须使用旧版本,您通常可以将其包装在对Promise.resolve()的调用中,以便将行为强制为遵从promise的行为。
function checkforcompany () {
return $.ajax({
url: 'addjob_companycheck.php'
});
}
$(() => {
checkforcompany().then(dataresponse => {
const userhascompany = dataresponse;
if (Object.keys(localStorage).length > 0) {
getaddjobcache(userhascompany);
}
});
});此外,不要依赖全局变量来在上下文之间传递值。让getaddjobcache()接受userhascompany作为参数,如上所示。
最后是$() is recommended by jQuery instead of $(document).ready()。
发布于 2019-04-16 15:15:23
有两种方法,一种是使用callback functions,另一种是使用.then block或async-await
使用回调函数的
var userhascompany;
$(document).ready(function(){
checkforcompany();
});
function checkforcompany(){
$.ajax({
url: 'addjob_companycheck.php',
success: function(dataresponse) {
userhascompany = dataresponse;
if (Object.keys(localStorage).length > 0) {
getaddjobcache();
}
}
});
}使用promise .then的
var userhascompany;
$(document).ready(function(){
checkforcompany()
.then(function(dataresponse){
userhascompany = dataresponse;
if (Object.keys(localStorage).length > 0) {
getaddjobcache();
}
})
});
function checkforcompany(){
return new Promise(function(resolve, reject){
$.ajax({
url: 'addjob_companycheck.php',
success: function(dataresponse) {
resolve(dataresponse)
}
error: function(err) {
reject(err)
}
});
})
}使用jQuery ajax .done的
var userhascompany;
$(document).ready(function(){
checkforcompany()
.done(function(dataresponse){
userhascompany = dataresponse;
if (Object.keys(localStorage).length > 0) {
getaddjobcache();
}
})
});
function checkforcompany(){
return $.ajax({
url: 'addjob_companycheck.php',
});
})
}https://stackoverflow.com/questions/55702296
复制相似问题