异步请求的结果能否当做另一个异步请求的必填项参数

var firstNum,secendNum;//定义全局变量

    function first(){
        $.ajax({
            type:"POST",
            async:false,
            url:"http://120.132.230.256:8888/wallet/tran",
            data:data,
            success:function(data){
                if(data.code==1){
                    firstNum=data.info;
                }  
            }
        });
        return firstNum;//正确返回firstNum,假设这个值是‘useId10086’
    }
    function secend(){
        console.log('请求中间的:'+firstNum);//这里能打印出‘useId10086’
        $.ajax({
            type:"GET",
            async:false,
            url:url,
            data:{id:firstNum},//这里要用到firstNum,必填项
                               //问题在这里,我如果用{id:'useId10086'}是可以得出我想要的相关数据
                               //用{id:firstNum}却不能得到我要的数据
                               //问:能以{id:firstNum}方式得到我想要的数据嘛,或者其它方式?
            success:function(data){
                if(data.code==1){
                    console.log(data);
                    secendNum = data.info.name;
                }
            }
        });
        return secendNum;
    }
    
    first();
    secend();
    //最外层
    console.log(firstNum);//打印‘useId10086’
    console.log(secendNum);//打印空

如何能实现 first() 方法中得到的结果,并把得到的结果传值给 secend() 请求,从而得到我想要的数据。
万望各位解惑,感激万分!

阅读 2.6k
3 个回答

理论上你的代码没有问题(你将ajax同步调用了,async:fasle,所以没有其他回复人所说的问题)。
请检查一下 secend方法中 data:{id:firstNum}中变量的拼写是否正确

解决方案比较多。
第一,这两年比较流行的解决方案是 Promsie ,利用promise的then函数自然串联。
第二,不知道你用的jQuery是哪一个版本,从 jQuery 1.5 开始,$.ajax()返回的jqXHR对象 实现了 Promise 接口, 使它拥有了 Promise 的所有属性,方法和行为。
所以呢如果版本支持你可以直接串联promsie:

function first(){
   return $.ajax({
        type:"POST",
        async:false,
        url:"http://120.132.230.256:8888/wallet/tran",
        data:data
    });
    return firstNum;//正确返回firstNum,假设这个值是‘useId10086’
}
function secend(firstNum){

    return $.ajax({
        type:"GET",
        async:false,
        url:url,
        data:{id:firstNum},//这里要用到firstNum,必填项
                           //问题在这里,我如果用{id:'useId10086'}是可以得出我想要的相关数据
                           //用{id:firstNum}却不能得到我要的数据
                           //问:能以{id:firstNum}方式得到我想要的数据嘛,或者其它方式?
     
    });
}
first().done(secend).done(() => {})

上面只是伪代码,请意会。jquery 文档 https://www.jquery123.com/jQu...
当然,你也可以用promsie 再包裹一层实现。

一个异步的操作依赖另一个异步的结果。
以前只能用回调解决,现在用promise
ES7我们用async/await

如果你想解决这个问题。

把second写在first的success回调里面,然后在second的回调里面调用外部的函数把这两个结果传递过去。
这种代码整个网站都有

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题