ajax 中 success 方法的 return

做前后台交互时会经常用到 ajax,有时候会遇到这样的情况,我们在 a 方法中调用 b 方法,b 方法里是一个 ajax,成功请求后会返回一个结果 data,而我们希望通过 b 方法的返回值获取到 data,我们的代码可能是这样的:

javascript 复制代码
function a() {
	var data = b();
}

function b() {
	$.ajax({
        type : "GET",
        url : "",
        dataType : "json",
        success : function (data) {
        	return data;
        }
    });
}
复制代码

但是,这样直接在 ajax 中的 success 方法里写 return data 是不能达到预期效果的,其实,上面的过程相当于如下的代码:

javascript 复制代码
function a() {
	var data = b();
}

function b() {
	ajax();
}

function ajax() {
	success();  //成功时调用success方法
}

function success() {
	return data;
}
复制代码

调用 ajax 时,可以看做调用了一个叫 ajax 的方法,当成功的时候,ajax 会再调用一个叫 success 的方法,可以看到,此时 data 只是被 return 到 ajax 方法中,而 ajax 并没有继续向外 return,所以,通过 ajax 中 success 方法获取到的返回结果,只是存在于 ajax 内部,b 方法并不知情。

因此,如果希望 b 能返回 data,只需把 data 赋值给 b 中的一个变量,再在 ajax 之后返回这个变量即可:

复制代码
javascript 复制代码
function a() {
	var data = b();
}

function b() {
	var result;
	$.ajax({
        type : "GET",
        url : "",
        dataType : "json",
		async : false,
        success : function (data) {
        	result = data;
        }
    });
	return result;
}

不过需要注意的是,ajax 中需要把 async 属性设置为 false,async 的意思是异步,设置为 false,就代表这个 ajax 不再是异步的,而是同步的。同步异步有什么区别呢?在这个问题中,如果是异步的,则可能 ajax 还没有执行到 success 方法,后面的 return result 就已经执行了,也就获取不到 data 了。而如果设置为同步,那么 ajax 后面的代码就会等待 ajax 执行完毕才执行,这样 return result 就是已经赋过值的了。

相关推荐
美狐美颜sdk7 小时前
从人脸关键点到动态贴图:面具特效在美颜SDK中的实现原理
前端·图像处理·人工智能·直播美颜sdk·美颜api
我命由我123457 小时前
React Router 6 - 编程式路由导航、useInRouterContext、useNavigationType
前端·javascript·react.js·前端框架·html·ecmascript·js
威联通网络存储7 小时前
告别掉帧与素材损毁:威联通 QuTS hero 如何重塑影视后期协同工作流
前端·网络·人工智能·python
anOnion7 小时前
构建无障碍组件之Tabs Pattern
前端·html·交互设计
一招定胜负8 小时前
课堂教学质量综合评分系统
java·linux·前端
橙露8 小时前
JavaScript 异步编程:Promise、async/await 从原理到实战
开发语言·javascript·ecmascript
2301_780669869 小时前
前端logo替换开发
前端·vue.js
启山智软9 小时前
【启山智软智能商城系统技术架构剖析】
java·前端·架构
我命由我123459 小时前
React Router 6 - 嵌套路由、路由传递参数
前端·javascript·react.js·前端框架·html·ecmascript·js
十六年开源服务商10 小时前
2026年WordPress网站地图完整指南
java·前端·javascript