当前位置: 代码迷 >> Web前端 >> 回调函数的返回值给全局变量的赋值有关问题
  详细解决方案

回调函数的返回值给全局变量的赋值有关问题

热度:114   发布时间:2013-10-10 14:14:51.0
回调函数的返回值给全局变量的赋值问题

    

            今天遇到一个问题,在js中,回调函数的返回值对全局变量进行赋值,网上的解决方案主要是把异步改为同步 async: false,好记性不如烂笔头来记录一下。

            源代码如下:

  

 $('#loginSubmit').click(function(){
    		 
	    		var useremail = $("#login_email").val();
	    		var password = $("#login_password").val();
	    		var emailHash = HASH.md5(useremail);
	    		var newPsd = 0;

	    		AUTH.fnPreLogin(emailHash,function(json){
	    			
	    		           console.log("success, token = " + json.data.pre_login_token);
	    		   
	 			   newPsd = HASH.md5(HASH.md5(password)+json.data.pre_login_token);
	 			   console.log("newPSD: " + newPsd);
	 			   
	 			   idcode = json.data.pre_login_token;
	 			   console.log("idcode: "+idcode);
	 			
	 			   
	 		   });
	    		
	    		AUTH.fnLogin(emailHash,newPsd,idcode,function(json){
	    			   console.log("success, token = " + json.data.token);
		        });		     
    	 });

       报错fnLogin在调用newPsd时,newPsd未能在回调函数中赋值成功,其中的fnPreLogin 和fnLogin的定义如下:


function fnPreLogin(email,callback){
		   
		   	   console.log("fnPreLogin");
			   var myDate = new Date();			   
			   var preData = {
					   email: email,
					   time:myDate.toLocaleTimeString()
			   };
			  $.get(url_preLogin, preData, callback);
		   
		}  
	   
	   function fnLogin(email,psd,code,callback){
		   
		   	   console.log("fnLogin");
			   var myDate = new Date();	

			   var data = {
						email: email,
						password: psd,
						idcode: code,
						time:myDate.toLocaleTimeString()
			   };

			   $.get(url_login, data, callback);
		} 

              在fnPreLogin()异步改为同步 async: false,用ajax方法实现即可,更改如下:

 function fnPreLogin(email,callback){
		   
		   	   console.log("fnPreLogin");
			   var myDate = new Date();
			   
			   var preData = {
					   email: email,
					   time:myDate.toLocaleTimeString()
			   };
			   
			   $.ajax({
				   url: url_preLogin, 
				   async: false,
				   type: "GET",
				   data:  preData,
				   success: callback
			   });
		}  

       


  相关解决方案