Jquery绑定单击事件Ajax发送请求后success回调方法使用this操作当前对象无效

今天遇到一个奇怪的事情:我给一个按钮注册了一个单击事件,单击后使用this调用当前对象对button进行修改并且发送ajax请求,然后在success方法里面再次使用this操作当前的按钮对象无效?

场景还原

<!--页面上的一个按钮,就是要操作的当前对象-->
<button id="btn">按钮一</button> 
$("#btn").click(function(){
	$(this).text("禁用按钮一");  //this获取当前对象,修改按钮一的内容
	$.ajax({
		url:"json/data.json",
		type:"get",
		dataType:"json",
		success:function(data){
			$(this).text("恢复按钮一");
			console.log("看看进来没有?");
		}
	});  //ajax结尾
});

结果
在这里插入图片描述
按照执行的顺序来说:jquery监听到按钮的单击事件之后,首先调用当前对象修改button按钮内容为“禁用按钮一”,然后发送ajax请求到"json/data.json"路径,成功后再次调用当前对象修改button按钮内容为“恢复按钮一”且输出一条语句。事实是:第二次修改button内容为“恢复按钮一”并没有执行,而打印的语句正常执行。这是不是就是说success回调正常进入,但是$(this).text(“恢复按钮一”);是无效的?

然后我对ajax执行进行了调试:给ajax发送设置断点,发现执行步骤是ajax直接到结尾,过程中并没有执行success回调方法,而是跳入到jquery中执行了一些其他方法,回来之后执行的success回调方法。这是不是this已经不再success方法里面了,所以获取不到?

在这里插入图片描述
不会js代码调试?看看这里

之后,我不采用this获取当前对象了,而是使用button的id。

$("#btn").click(function(){
	$("#btn").text("禁用按钮一");  //修改按钮一的内容
	$.ajax({
		url:"json/data.json",
		type:"get",
		dataType:"json",
		success:function(data){
			$("#btn").text("恢复按钮一");
			console.log("看看进来没有?");
		}
	});
});

结果
在这里插入图片描述

O! M! G! 成功了!

看来以后能用id的绝不使用this调用当前对象了。

这是不是和ajax的异步请求有关系呢?有没有大神评论区回答一下!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白说(๑• . •๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值