js function 返回 ajax 的返回值的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js function 返回 ajax 的返回值的问题相关的知识,希望对你有一定的参考价值。
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());
刚才稍微查了一下,说是 设置成同步,如何设置为同步……?
先说同步,就像我们正常运行的代码,顺序执行的一样,一行一行执行代码,只有当第一行执行完毕以后才会执行第二行代码。
而异步是当这个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)会是异步模式,否则怎么都是同步模式
而要说阻止在某段函数里不去写 某段代码,除非是人为故意不去写,否则无法控制的。
大侠,能再详细点么?
function request(params, isAsync, callback)
$.ajax(
...
data: "jsonParam":JSON.stringify(params),
async: isAsync,
找到这个了,不是指定了是 false 了麽
嗯,就是这里的async,值为false的话就是同步了。
追问虽然给了false,但没实现我想要的效果T_T
好吧。我不在自己的代码上改了,直接问:
两个function get() show(data)
get() 使用 ajax 获取并返回一个json数据。
show(data) 用来显示 一个json数据。
怎么能实现写?
两个函数要完全独立,一个只负责拿,一个只负责显示。
ajax返回json时,js获取类型,是字符串类型
ajax向php服务端请求,并返回json串给前端。
js发现得到的返回值的类型是字符串,不能直接取json对象属性,需要JSON.parse()。
怎么解决呢?
这需要在php返回json时,加上一个header(),告知js,我这个返回的是Content-Type是json。这样js获取的就是json对象类型了。
header(‘Content-Type: application/json; charset=utf-8‘);
当返回的是字符串类型时,有可能Content-Type:text/html。
以上是关于js function 返回 ajax 的返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章
js 写带有返回值的function遇到的返回值不正常的情况