我有两个像这样的嵌套函数:
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
。
答案 0 :(得分:2)
修改checkforcompany()
以返回由jqXHR
创建的$.ajax()
,因为它实现了thenable接口。我建议使用jQuery 3.x for consistent promise behavior,但是如果必须使用旧版本,通常可以将其包装在对Promise.resolve()
的调用中,以将行为强制为符合诺言的行为。>
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()
。
答案 1 :(得分:1)
有两种方法,一种是使用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',
});
})
}