原生JS 解决ajax return返回undefined问题 思路
事件原因:
在整合前端逻辑的时候,发现很多js都写了ajax的请求,由于都是走的json,所以基本格式几乎是一致的,所以想把所有需要调用ajax请求的js文件同一调用一个封装好的ajax请求函数,统一请求接口;
产生问题:
由于很多方法都在调用ajax,数据的处理基本都是根据ajax响应数据写的独立的方法,所以需要得到ajax的返回数据,由于把ajax请求统一了,因此功能处理函数需要得到ajax的数据,这里就需要一个从ajax 的return数据
问题:
如果直接在ajax里面return,会得到undefined未定的的数据包
想要得到返回数据包并return出来的方向:
1、在ajax方法中定义一个array,然后把数据push到array中,return array就能得到数据
2、把ajas的open()中的true改为false,让ajax的异步请求改为同步请求,然后就能直接return数据了
3、采用回调函数,把ajax方法封装一个函数入口,然后把处理函数直接放进去
而我使用的则是回调函数方法,原因是:第一种,数据形式可能会被破坏,本来的json变成了list,第二种取消了异步,对于等待较长的函数性能影响较大,第三种保留异步的形式,同时直接把数据处理函数放进去,性能影响最小,数据格式没变;
未测试部分:由于没有用到回调函数是否需要返回值的功能,未测试回调函数是否要return;
回调函数用法:
function a(){
处理函数
}
function ajax(indata1,indata2){
ajax封装函数:
indata2();
}
使用:
ajax(url,a);
这最后ajax(url,a)这里就是使用ajax的回调函数;这样实际上的形式是:
function ajax(){
url;
function a(){
处理函数
};
}
注意点,再调用回调函数的时候,ajax(url,a)不要写成ajax(url,a());否则会报错undefined;
为什么ajax直接return会报错undefined?
主要是js的执行计划和一般的后台变成语言不太一样,java python等后端语言执行顺序都是严格按照代码顺序执行的,而js为了保障浏览器的高性能,会对函数进行异步执行,简单的说来就是js能明确高性能执行的函数会顺序执行,比如for,if等,对于有延时函数等一些异步的函数,会同时执行该函数后面的代码,由于ajax请求是异步的,所以再return ajax的时候,还未得到数据就返回了ajax,这时候就会得到undefined的返回值;
更多推荐



所有评论(0)