一个javascript的ajax有关问题(jquery).内容不知道如何说,请进来看代码
一个javascript的ajax问题(jquery).内容不知道怎么说,请进来看代码。
代码是这样的意思。按钮btn1会更新 a1或a2或a3.....an的DIV。(意思就是其中一个是激活状态的div)
当点击btn时是可以确定这个div的。
但服务端反应很慢。(假设很慢).这时我再去搞其它操作。就改变了div的激活状态。
这时服务端再返回数据后就更新了新的DIV。而不是原有的那个DIV。有什么办法 吗?
------解决思路----------------------
建议用操作层面来解决这个问题,就是当btn1 更新完后才可以出现btn2按钮进行操作,因为你的需求就是 当btn1 一切完后再执行btn2, 是这样一个顺序的过程,要想数据完全保证一致,这样会好点,如果你不这样那再行, 就是你在btn1去更新的时候 把更新过的做个记录 ,哪些DIV做过更新,哪些没做过, 然后btn2 用个定时器 就根据这些记录来做操作, 当记录全部更新完,停止定时器, 这样做也能实现 就是麻烦点,感觉没必要这样做。
------解决思路----------------------
设置为同步操作,就是必须等待ajax操作完后才执行下步
//全局设置ajax为同步
$.ajaxSetup({
async: false/*设置异步为false,即同步*/
});
------解决思路----------------------
1.点了其中一个btn后,其他btn设置为disable
2.设置ajax异步为false
你提的需求不适合异步操作,如果不想用以上两种方案,给个思路
设置一个变量 temp ,点btn1的时候,把tc的值赋给temp,btn1的回调函数里 $("#a" + temp) ,就可以找到原来的那个div了。 每次发送请求的时候,才会去更新目标div。不知道这样能不能满足你的需求
------解决思路----------------------
可以先给事件源(input)添加一个属性,标识是否ajax请求完成,如果未完成不允许操作目标容器(div)
@{
ViewBag.Title = "Index";
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>AdminIndex</title>
@Styles.Render("~/Content/css", "~/Content/themes/base/css")
@Scripts.Render("~/bundles/jquery", "~/bundles/jqueryui", "~/bundles/jqueryval", "~/bundles/modernizr", "~/bundles/AdminUI", "~/bundles/jqGrid")
<script type="text/javascript">
var tc = 1;
$(function () {
$("#btn1").click(function () {
$.get("/Admin/Test/a1", { r: Math.random() },
function (data, textStatus, jqXHR) {
//tcTemp = jqXHR.getResponseHeader("TabCounter");
var tca = tc;
$("#a" + tc).text(data);
});
});
$("#btn2").click(function () {
tc = tc + 1;
alert(tc);
});
});
</script>
</head>
<body>
<h2>
Index1</h2>
<input id="btn1" value="按钮1" type="button" />
<div id="a1">
a1</div>
<div id="a2">
a2</div>
<input id="btn2" value="改变数字" type="button" />
</body>
</html>
代码是这样的意思。按钮btn1会更新 a1或a2或a3.....an的DIV。(意思就是其中一个是激活状态的div)
当点击btn时是可以确定这个div的。
但服务端反应很慢。(假设很慢).这时我再去搞其它操作。就改变了div的激活状态。
这时服务端再返回数据后就更新了新的DIV。而不是原有的那个DIV。有什么办法 吗?
------解决思路----------------------
建议用操作层面来解决这个问题,就是当btn1 更新完后才可以出现btn2按钮进行操作,因为你的需求就是 当btn1 一切完后再执行btn2, 是这样一个顺序的过程,要想数据完全保证一致,这样会好点,如果你不这样那再行, 就是你在btn1去更新的时候 把更新过的做个记录 ,哪些DIV做过更新,哪些没做过, 然后btn2 用个定时器 就根据这些记录来做操作, 当记录全部更新完,停止定时器, 这样做也能实现 就是麻烦点,感觉没必要这样做。
------解决思路----------------------
设置为同步操作,就是必须等待ajax操作完后才执行下步
//全局设置ajax为同步
$.ajaxSetup({
async: false/*设置异步为false,即同步*/
});
------解决思路----------------------
1.点了其中一个btn后,其他btn设置为disable
2.设置ajax异步为false
你提的需求不适合异步操作,如果不想用以上两种方案,给个思路
设置一个变量 temp ,点btn1的时候,把tc的值赋给temp,btn1的回调函数里 $("#a" + temp) ,就可以找到原来的那个div了。 每次发送请求的时候,才会去更新目标div。不知道这样能不能满足你的需求
------解决思路----------------------
可以先给事件源(input)添加一个属性,标识是否ajax请求完成,如果未完成不允许操作目标容器(div)