使用閉包解決jQuery中AJAX的外部變量問題

在AJAX中,咱們常常都要使用外部變量,常常會屢次使用,以下代碼html

function getCarInfo(){
			for(var i=0;i<4;i++){
			
				var carId = $("#carList0"+i+" #carId").val();
				var request = {  
					city: city,
					carId: carId
			    };
				
				$.ajax({
				  	url:"enquiry",
					type:'post',
					data:request,
					//async: false,
					success:function(data){
						//alert(data);
						var strArr = data.split("#");
						$("#carList0"+i+" #distributorId").val(strArr[0]);
						$("#carList0"+i+" #font16").html(strArr[strArr.length-1]);
					}
				});
				
			}
		}

我期待的是按順序alert(1) alert(2) alert(3) alert(4),可是實際上三次都是alert(4)ajax

這均是因爲AJAX異步致使的問題,設置同步(async: false,)就能夠解決這個問題,可是隨之而來的是,效率減低不少。這時能夠輕鬆使用閉包解決問題:閉包

function getCarInfo(){
			for(var i=0;i<4;i++){
			((function(i){
				var carId = $("#carList0"+i+" #carId").val();
				var request = {  
					city: city,
					carId: carId
			    };
				
				$.ajax({
				  	url:"enquiry",
					type:'post',
					data:request,
					//async: false,
					success:function(data){
						//alert(data);
						var strArr = data.split("#");
						$("#carList0"+i+" #distributorId").val(strArr[0]);
						$("#carList0"+i+" #font16").html(strArr[strArr.length-1]);
					}
				});
				}(i)));
			}
		}
相關文章
相關標籤/搜索