在ajax中如何把局部变量变为全局变量

今天在做一个项目时,遇到了一个问题。我用的是ajax,要在$.ajax({})里面给一个全局变量赋值,结果死活赋值不上,(就是给变量赋值是,外部始终拿不到该值,即无法当成全局变量)纠结了好半天,后来在网上查了很多,才知道,ajax默认是异步请求,如果要在$.ajax({})里面给全局变量赋值,需要改为同步操作,即加上async : false,除此之外在变量前还需要加上window
,就可以了。
代码如下:

$.ajax({

    url:'一个域名',
    type:'post',
    async : false,
    data:{
     imei: $imei,
     page: $page   
    },
    dataType:"json",
    success:function(result){

         var $totalPages=result.totalPages
      window.totalPages= result.totalPages     //足以说明这个才是把局部变量升级为全局变量啊
          $('#wei').text('总共'+result.totalPages+'页')
        var data=result.content
      $('#userBox').html(template('userTpl',data));
            var html=template("userTpl",data)
            // console.log(html)
    }
  });
console.log($totalPages)   //结果是undefined
console.log(window.totalPages) //终于拿到我想要的数值了。。。。。哭唧唧

在函数中,传进window这个最高对象,把局部变量赋值给window中的一个属性,即可成为全局变量。
见如下例子

(function(win){
	var num = 10;
	win.number = num;
})(window);
console.log("num:"+num);
//结果:报错,因为num是局部变量,在全局变量中没有声明过
console.log("number:"+window.number);
//结果:number:10 ,window.number是一个全局变量

复制代码注意:(function(){})();这是函数自调用,函数只调用一次的写法

以下是网上看到的demo

$.ajax({ 
type:"post", 
url:"a.action", 
data: {}, 
dataType: 'text', 
async : false,//设置为同步操作就可以给全局变量赋值成功 
success:function(data){ 
usersname = data;//usersname为前面声明的全局变量 
} 
});

以下是自己写的异步验证用户名是否存在的代码

 var results;
        
    	$.ajax({
			type: "POST",
			url: "ajax/checkfor1.php?action=reg_checkEmail",		
			data: {email:email}, 
			dataType: 'text', 
			async: false,
			success: function(data){													
					results=data;
					return false;
			},
			error: function() {  
				        
				          alert("异常!");  
				     }  
		});
    	if(results==0){
    		ShowTips("用户名已经存在");  
        	return false;}

var coordinates = (function() {
    var result;
    $.ajax({
        type:'POST',
        url:'/json',
        dataType:'json',
        data:{cmd:'coordinates'},
        async:false,
        success:function(data){
            result = data;
        }
    });
    return result;
})();
 
$(document).ready(function(){
    if(coordinates.length) {//初始化页面,把所有坐标列一个列表
      $.each(coordinates, function(index,term) {
        var $item = $('<li class="item"></li>').text('坐标:'+term[0] + ',' + term[1]).appendTo('#list');
      })
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值