首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最简单的方法-只有当ajax-request函数完成时才调用函数- callback,promise

最简单的方法-只有当ajax-request函数完成时才调用函数- callback,promise
EN

Stack Overflow用户
提问于 2019-04-16 14:58:24
回答 2查看 42关注 0票数 0

我有两个嵌套函数,如下所示:

代码语言:javascript
复制
var userhascompany;

$(document).ready(function(){

    checkforcompany();


        if (Object.keys(localStorage).length > 0) {

            getaddjobcache();

        }

    });

checkforcompany();函数如下所示:

代码语言:javascript
复制
$.ajax({

    url: 'addjob_companycheck.php',
    success: function(dataresponse) {

        userhascompany = dataresponse;

    }

}); 

只有当变量getaddjobcache();有一个值,或者更确切地说,ajax请求已经完成时,才应该调用函数userhascompany

EN

回答 2

Stack Overflow用户

发布于 2019-04-16 15:18:03

修改checkforcompany()以返回由$.ajax()创建的jqXHR,因为它实现了接口。我推荐使用jQuery 3.x for consistent promise behavior,但是如果您必须使用旧版本,您通常可以将其包装在对Promise.resolve()的调用中,以便将行为强制为遵从promise的行为。

代码语言:javascript
复制
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()

票数 2
EN

Stack Overflow用户

发布于 2019-04-16 15:15:23

有两种方法,一种是使用callback functions,另一种是使用.then blockasync-await

使用回调函数的

代码语言:javascript
复制
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的

代码语言:javascript
复制
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的

代码语言:javascript
复制
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',
        });
    })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55702296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档