工作留档--$.post和$.ajax区别

今天部署开发任务的时候,我接到的活中有一个修改bug的活(哈哈,水平不够bug来凑),这个bug是这样式的,点击修改,下拉框动态加载数据有时可以加载到有时又不能获取到。这个是不是很神奇啊。刚开始拿到这个任务的时候,我就考虑到了加载顺序的问题。果不其然啊,我一看js代码,我的乖乖,通篇全用的$.post,部分代码如下:

$.post(url, Obj, function(result){
	var dataObj=eval("("+result+")");//为啥要写这句代码,后面说
	.................//后面就不写了

我修改之后的代码如下:

function getA(){	
var Obj = {
			className:'这个就自己看自己的喽',
			methodName:'同上',
	};
	$.ajax({    
		   url: url,
		   data:Obj,    
		   type:'post',    
		   dataType:'json', 
		   async:false,//下方有解释
		   success:function(result) {
			var dataObj= result;
			*******//下面就不写了

上述代码的*async:false;*解释如下:
在ajax中,async来控制异步或同步,默认为true,表示为异步请求,在具体执行过程的表现为,在这个Ajax代码运行的过程中其它代码同样可以运行,那么这里就可能出现一个问题,在ajax请求执行中,可能ajax还未执行完,就可能已经完成了ajax请求后面的操作。(这也是我这个bug出现的原因)。但是当设置为false时,表现的为同步请求,同步请求的意思就是当js代码执行到当前ajax时,会停止页面中的所有代码,当Ajax请求执行完毕后,才继续执行。
而$.post默认就是为异步请求,所以会出现很多很多这样的问题,数据还没加载出来呢,你就完事了。就像结婚新娘还没接到家呢,你婚礼就完事了。那是不是就感觉肯定缺少点啥。
总结:因此我的修改bug的重任就在这同步和异步的恍惚之间解决了。

差点忘了:

	var dataObj=eval("("+result+")");//为啥要写这句代码,现在说

解释:如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值