js function 返回 ajax 的返回值的问题

functiongetUserInfo(){request({"OpCode":1105},false,function(data){if(data["ar"]["cod... function getUserInfo(){
request({"OpCode":1105},false,function(data){
if(data["ar"]["code"] == 0){
var userInfo = data["ar"]["result"];
return userInfo;
}else{
return null;
}
});
}
附代码,先通过ajax 获取用户信息。
然后:
showUserInfo(getUserInfo());

刚才稍微查了一下,说是 设置成同步,如何设置为同步……?
展开
 我来答
hu6242075
2014-01-01 · TA获得超过1764个赞
知道小有建树答主
回答量:817
采纳率:0%
帮助的人:680万
展开全部
异步和同步的区别是
先说同步,就像我们正常运行的代码,顺序执行的一样,一行一行执行代码,只有当第一行执行完毕以后才会执行第二行代码。
而异步是当这个http发起请求以后,js不会一直在原地等待返回结果的到来,只有当服务器返回数据以后,才会回调函数。同步就是一直在那里等待结果的返回。异步操作不适用于直接return一个结果
追问
恩,你的意思我大概明白了。
那假如啊,我写一个通用的获取数据方法 get,但不同的地方要用不同的显示方式,也就是不同的 show(data)
get 方法里是用的 ajax 获取数据。
我希望他们顺序执行:
data = get();
show(data);
希望他们能独立,即:get 方法里不能出现 show 的定义,show的方法体里不能出现 get的定义。
能实现吗?
追答
其实你可以这么做,像get 这个函数  
你可以写成这样
get(isAsync)
{
var async=true;
if(typeof isAsync=="boolean" && isAsync==false)
async=false;
$.ajax({
url:'',
data:{},
async:async
...
})
}
这样写,在调用 get的时候,你如果不传参数 默认就是异步模式,除非你传值为false,那么它就会以同步模式去执行。

可以这样调用 get() 或者是get(false)
如果不传参数的话,get()这样写,那么在
get(isAsync)
{
var async=true;
if(typeof isAsync=="boolean" && isAsync==false)
async=false;
这段代码中,没传isAsync的参数,那么这个get函数被执行时,isAsync的类型就是undefined,
typeof isAsync 的结果就是"undefined" 所以if条件不成立,依旧就是异步模式
那么这个get执行时 就是以异步模式执行的(当然按你的想法,可以直接将var async=false;这样直接就是默认同步模式,除非get(true)会是异步模式,否则怎么都是同步模式

而要说阻止在某段函数里不去写 某段代码,除非是人为故意不去写,否则无法控制的。
heycn
2013-12-30 · TA获得超过100个赞
知道答主
回答量:78
采纳率:0%
帮助的人:58.9万
展开全部
async: false
更多追问追答
追问
大侠,能再详细点么?
function request(params, isAsync, callback) {
$.ajax({
...
data: {"jsonParam":JSON.stringify(params)},
async: isAsync,

找到这个了,不是指定了是 false 了麽
追答
嗯,就是这里的async,值为false的话就是同步了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式