程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 前端-關於js匿名函數的返回值的獲取問題

前端-關於js匿名函數的返回值的獲取問題

編輯:編程解疑
關於js匿名函數的返回值的獲取問題

我還在讀js的基礎書籍,所以對一些js原理了解不是全面,所以問題如有愚昧,還請見諒。

 function asynSubmit(sData,action,method="POST"){
    var httpRequest = new XMLHttpRequest();
    var rMessage="請求未發送";
    httpRequest.open(method,action);
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
                return rData;
            }else{
                return "服務器異常";
            }
        }else{
            return "服務器未響應";
        }
    }
}

如上述代碼,我想封裝一個ajax的函數。想讓函數返回responseText的值,因為onredeaychang調用了匿名函數,在匿名函數裡返回的值我要怎麼在外層函數獲取?或者有其他什麼方法能達到我的目的?我也試過在外層函數定義變量,在匿名函數裡為變量賦值,但由於匿名函數綁定了事件,所以這樣做直接返回空值。

自己想了很久,也百度過了,實在想不出解決辦法,還請各位不吝賜教。

最佳回答:


你要reutrn也要在asynSubmit最後,在匿名函數裡面return是匿名函數的返回值,並不是asynSubmit的。而且你設計到ajax,只有改為同步asynSubmit return才能獲取到值,異步的只能通過回掉形式來獲取值

同步

  function asynSubmit(sData,action,method="POST"){
 var rst=false;/////////////

    var httpRequest = new XMLHttpRequest();
    var rMessage="請求未發送";
    httpRequest.open(method,action,false);//////////////改同步
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
                rst= rData;////////////////////////////////////
            }else{
                rst= "服務器異常";////////////////////////////////////
            }
        }else{
            rst= "服務器未響應";////////////////////////////////////
        }
    }
        return rst////////////////////////////////////
}
var data=asynSubmit('xxx','xxxx','xxxxx')//
alert(data)

異步,只能回掉,無法return


 function asynSubmit(sData,action,method="POST",callback){
    var httpRequest = new XMLHttpRequest();
    var rMessage="請求未發送";
    httpRequest.open(method,action);
    httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");
    httpRequest.send(sData);
    httpRequest.onreadystatechange=function(){
        if(httpRequest.readyState===4){
            console.log("4");
            if(httpRequest.status===200){
                console.log("200");
                var rData=httpRequest.responseText;
                //JSON.parse(httpRequest.responseText);
               callback( rData);////////////////////
            }else{
                callback( "

服務器異常");////////////////////
}
}else{
callback( "服務器未響應");////////////////////
}
}
}

asynSubmit('xxx','xxxx','xxxxx',function(data){alert(data)})//

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved