Javascript ajax 异步传输问题

Javascriptajax异步传输问题action(){action_a();\\这里只运行ajax发送到后台获取传回的值action_b();\\这里执行一些普通ja... Javascript ajax 异步传输问题
action()
{
action_a(); \\ 这里只运行ajax 发送到后台 获取传回的值

action_b(); \\这里执行一些普通javascript
}
我是想action_a执行完后获取返回的值再来执行action_b , 可能执行ajax后台操作数据库的执行时间长原因 , 造成action_a未返回值就执行了action_b。 该怎么解决?
展开
 我来答
希尼卡米
2013-06-17 · TA获得超过170个赞
知道答主
回答量:123
采纳率:0%
帮助的人:79万
展开全部
用Ajax一般会绑定回调函数callback(),在函数里获得从服务器或数据库取得的值,然后再调用action_b,就可以保证 b在a之后执行了。
//创建代理对象
function createXMLHttpRequest() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlHttp == undefined || xmlHttp == null) {
alert("当前浏览器不支持XMLHttpRequest");
return;
}
}
//创建回调函数
function callback() {
//判断通讯是否结束

if (xmlHttp.readyState == 4) {
//判断返回信息是否正确
if (xmlHttp.status == 200) {
//获得服务器返回信息
/*
action_b();
*/
}
}
}
}
//主函数,Ajax入口
function f() {
createXMLHttpRequest();

//注册回调方法
xmlHttp.onreadystatechange = callback2;

//设置和服务器的通讯
var url="CheckNickName?name="+name;

xmlHttp.open("POST", url, true);
//发送通讯
xmlHttp.send(null);
}
追问
我描述的有点问题  ,其实是 b调用的a  ,   a是在b里面执行的 。 这样的话,怎么解决呢?
追答
不是一样,Ajax都有一个入口函数,就是上面的f(),在action_里调用f()(相当于你的a)就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cai_love_feng
2013-06-17 · TA获得超过998个赞
知道小有建树答主
回答量:416
采纳率:100%
帮助的人:289万
展开全部
不知道此ajax是否进行过封装,如果进行过封装,可以参考下设置同步异步的属性

如果不是进行了封装,请参考下ajax设置同步和异步

第二种方式是,ajax有回调方法的,将action_b放到回调方法中就可以了,
回调方法就是执行完ajax请求后,才会执行的方法。
追问
其实我的action_a 是在 action_b
里边执行的,而且是必须的, 那怎么样设置ajax同步呢?
追答
objXMLReq.open("POST", strURL, isAsynchronism);
objXMLReq.send(parameter);

上面代码片段是ajax基础中的代码,其中open方法中定义了请求方式为post,然后是请求路径,最后一个参数是同步和异步,对应值是true 和false。
如果使用其他ajax框架的话,请查找下对应的帮助文档吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小蝴蝶软件应用
2013-06-17 · TA获得超过3209个赞
知道大有可为答主
回答量:4073
采纳率:0%
帮助的人:3093万
展开全部
这里说下同步和异步代码上的区别,同步时一个过程,就是下一行的代码需要上一行代码执行完毕才会执行,异步就是不管异步部分的代码是否返回了或者是否中断了,下一行的代码同样会执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lkiarest
2013-06-17 · TA获得超过543个赞
知道小有建树答主
回答量:761
采纳率:100%
帮助的人:412万
展开全部
将action_b放在action_b返回success处理的callback中,等success处理完再调用
更多追问追答
追问
额。。  其实我的action_a 是在 action_b
里边执行的 , 这样改怎么解决?
追答
你的action_b不是在action_a后面执行的吗?? 有代码吗?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式