我还在读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)})//
function test(){
var result = function (){
return "value";
}
alert(result());//value
}
window.onload = test;