请教:关于jquery的$.get()异步的问题

数据的流 2013-02-26 12:47:19
页面上有两个按钮:

<input type="button" id="btn_occur" value="占用" onclick="AcceptOperate(1);" />
<input type="button" id="btn_occur_cancel" value="取消" disabled="disabled" onclick="AcceptOperate(0);" />

原来我的AcceptOperate函数是这么写的

function AcceptOperate(oper_tag)
{
$.get("/Order3/Order_UpdateByOrder_id?order_id=" + escape($V("#tb_order_id").trim()) + "&isOperFlag=" + oper_tag,
function (up_msg) {
if (oper_tag == "1")//占用
{
if (up_msg == "1")//占用成功
{
$("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled",false);
$("#btn_occur").attr("disabled", "disabled");
$("#btn_occur_cancel").attr("disabled", false);
}
else
alert("占用失败!");
}
else if (oper_tag == "0")//取消
if (up_msg == "1")//取消成功
{
$("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled", "disabled");
$("#btn_occur").removeAttr("disabled");
$("#btn_occur_cancel").attr("disabled", "disabled");
}
});
}

但是

$("#btn_occur").attr("disabled", "disabled");

这句代码执行却出现问题了,我审查元素看到btn_occur这个按钮单击后设置了disabled="disabled",但是过几秒disabled="disabled"又自己消失了!!!
后来我把代码改为如下就没有问题了

function AcceptOperate(oper_tag)
{
$.ajax({
type: "GET",
url: "/Order3/Order_UpdateByOrder_id?order_id=" + escape($V("#tb_order_id").trim()) + "&isOperFlag=" + oper_tag,
async: false,
success: function (data) {
if (oper_tag == "1")//占用
if (data == '1') {
$("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").removeAttr("disabled");
$("#btn_occur").attr("disabled", "disabled");
$("#btn_occur_cancel").removeAttr("disabled");
}
else {
alert("占用失败!");
}
else
if (data == '1') {
$("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled", "disabled");
$("#btn_occur").removeAttr("disabled");
$("#btn_occur_cancel").attr("disabled", "disabled");
}
else {
alert("取消失败!");
}
}

});
}


虽然问题解决了,但是这个disabled="disabled"自动消失却让我非常不理解,谁能告诉我具体是怎么回事?
...全文
290 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbjbepzz 2013-02-26
  • 打赏
  • 举报
回复
第一种写法可能是AcceptOperate被调用了两次,服务器响应时间比较长,所以出现那种情况。 第二种情况是个同步的请求,要等第一次调用执行完才能执行第二次。
yichaofan 2013-02-26
  • 打赏
  • 举报
回复
用谷歌浏览器 里面的网络 看页面请求了几次不就知道了吗
数据的流 2013-02-26
  • 打赏
  • 举报
回复
甚至我试过把else if (oper_tag == "0")//取消这个分支去掉,也还是这个问题,应该不是执行两次造成的
数据的流 2013-02-26
  • 打赏
  • 举报
回复
引用 3 楼 bbjbepzz 的回复:
这个不清楚,连接点击两次也不是没有可能,我一般处理点击的时候,是点击后马上把这个元素的click事件移除了,等响应后再重新绑定。 有的时候服务器响应慢,用户点了一下,等了会没有反应,他又会点击,可能就会出现你那种问题。
。。。这个是我自己点击的,肯定不会连点两次的,自己测试都没通过怎么好意思给客户用。。。
bbjbepzz 2013-02-26
  • 打赏
  • 举报
回复
这个不清楚,连接点击两次也不是没有可能,我一般处理点击的时候,是点击后马上把这个元素的click事件移除了,等响应后再重新绑定。 有的时候服务器响应慢,用户点了一下,等了会没有反应,他又会点击,可能就会出现你那种问题。
数据的流 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 bbjbepzz 的回复:
第一种写法可能是AcceptOperate被调用了两次,服务器响应时间比较长,所以出现那种情况。 第二种情况是个同步的请求,要等第一次调用执行完才能执行第二次。
为什么AcceptOperate可能被调用了两次呢,只是单击了一次按钮?

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧