鍍金池/ 問答/HTML/ 異步請求的結(jié)果能否當(dāng)做另一個異步請求的必填項(xiàng)參數(shù)

異步請求的結(jié)果能否當(dāng)做另一個異步請求的必填項(xiàng)參數(shù)

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,假設(shè)這個值是‘useId10086’
    }
    function secend(){
        console.log('請求中間的:'+firstNum);//這里能打印出‘useId10086’
        $.ajax({
            type:"GET",
            async:false,
            url:url,
            data:{id:firstNum},//這里要用到firstNum,必填項(xiàng)
                               //問題在這里,我如果用{id:'useId10086'}是可以得出我想要的相關(guān)數(shù)據(jù)
                               //用{id:firstNum}卻不能得到我要的數(shù)據(jù)
                               //問:能以{id:firstNum}方式得到我想要的數(shù)據(jù)嘛,或者其它方式?
            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);//打印空

如何能實(shí)現(xiàn) first() 方法中得到的結(jié)果,并把得到的結(jié)果傳值給 secend() 請求,從而得到我想要的數(shù)據(jù)。
萬望各位解惑,感激萬分!

回答
編輯回答
萢萢糖

一個異步的操作依賴另一個異步的結(jié)果。
以前只能用回調(diào)解決,現(xiàn)在用promise
ES7我們用async/await

如果你想解決這個問題。

把second寫在first的success回調(diào)里面,然后在second的回調(diào)里面調(diào)用外部的函數(shù)把這兩個結(jié)果傳遞過去。
這種代碼整個網(wǎng)站都有

2017年1月29日 01:04
編輯回答
舊時光

理論上你的代碼沒有問題(你將ajax同步調(diào)用了,async:fasle,所以沒有其他回復(fù)人所說的問題)。
請檢查一下 secend方法中 data:{id:firstNum}中變量的拼寫是否正確

2017年9月9日 06:18
編輯回答
半心人

解決方案比較多。
第一,這兩年比較流行的解決方案是 Promsie ,利用promise的then函數(shù)自然串聯(lián)。
第二,不知道你用的jQuery是哪一個版本,從 jQuery 1.5 開始,$.ajax()返回的jqXHR對象 實(shí)現(xiàn)了 Promise 接口, 使它擁有了 Promise 的所有屬性,方法和行為。
所以呢如果版本支持你可以直接串聯(lián)promsie:

function first(){
   return $.ajax({
        type:"POST",
        async:false,
        url:"http://120.132.230.256:8888/wallet/tran",
        data:data
    });
    return firstNum;//正確返回firstNum,假設(shè)這個值是‘useId10086’
}
function secend(firstNum){

    return $.ajax({
        type:"GET",
        async:false,
        url:url,
        data:{id:firstNum},//這里要用到firstNum,必填項(xiàng)
                           //問題在這里,我如果用{id:'useId10086'}是可以得出我想要的相關(guān)數(shù)據(jù)
                           //用{id:firstNum}卻不能得到我要的數(shù)據(jù)
                           //問:能以{id:firstNum}方式得到我想要的數(shù)據(jù)嘛,或者其它方式?
     
    });
}
first().done(secend).done(() => {})

上面只是偽代碼,請意會。jquery 文檔 https://www.jquery123.com/jQu...
當(dāng)然,你也可以用promsie 再包裹一層實(shí)現(xiàn)。

2018年8月16日 11:28