jquery ajax return值不能取得的解决方案

jQuery ajax - ajax() 方法

http://www.w3school.com.cn/jquery/ajax_ajax.asp

http://www.cnblogs.com/fqw1987815/archive/2010/09/03/1816976.html

http://www.jb51.net/article/38768.htm

 

http://www.debugease.com/aspdotnet/962356.html

http://www.2cto.com/kf/201310/249208.html

Jquery ajax 得到返回值

1.ajax默认是异步调用的,所以得到的返回值是空值,要得到值必须改成同步:async: false,//同步。
2.必须定义一个全局变量 var result = ""来保存返回值。否则得到的是undefined
function GetReturnValue(url, jsonText) {  
           var result = "";  
           $.ajax({  
               type: "POST",  
               url: url,  
               data: jsonText,  
               contentType: "application/json;charset=utf-8",  
               dataType: "json",  
               async: false,//同步  
               success: function (json) {  
                   result = eval('(' + json.d + ')');  
               }, failure: function () {  
                   result = "";  
               }  
           })  
           return result;  
}

 

jquery ajax return值不能取得的解决方案

大家先看一段简单的jquery ajax 返回值的js
代码
function getReturnAjax{
  $.ajax({
    type:"POST",
    url:"ajax/userexist.aspx",
    data:"username="+vusername.value,
    success:function(msg){
    if(msg=="ok"){   
   showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false)
      return true;
    }
    else
    {    
    showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false);
      vusername.className="bigwrong";
      return false;
    }
    }
  });
  }
 但是我们调用这个getReturnAjax()发现始终取得的都是false,那就是说return true,return false根本没有起作用,在火狐下用firebug调试也证明,代码根本不会执行到return 部分。
我们试想在函数里先定义一个变量,然后在ajax里赋值,最后在函数的末尾返回这个变量,会不会有效果呢?我们把代码修改如下:
代码
function getAjaxReturn()   
{
       var bol=false;
  $.ajax({
    type:"POST",
    url:"ajax/userexist.aspx",
    data:"username="+vusername.value,
    success:function(msg){
    if(msg=="ok"){   
   showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false)
      // return true;
   bol=true;
    }
    else
    {    
    showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false);
      vusername.className="bigwrong";
      //return false;
    }
    }
  });
  return bol;
  }
结果仍然不起作用。最后解决方案有2,如下
1、添加async:false.即修改为同步了,什么意思?(按同事解释就是,这是等这个ajax有了返回值后才会执行下面的js。一语道破天机,怪不得以前很多ajax调用里面的赋值都不起作用)。这样等ajax给bol赋值完毕后,才执行下面的js部分。而刚刚异步的话,还没有来得及赋值,就已经return了。
 
代码
function getAjaxReturn()   
{
       var bol=false;
  $.ajax({
    type:"POST",
    async:false,
    url:"ajax/userexist.aspx",
    data:"username="+vusername.value,
    success:function(msg){
    if(msg=="ok"){   
   showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false)
      // return true;
   bol=true;
    }
    else
    {    
    showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false);
      vusername.className="bigwrong";
      //return false;
    }
    }
  });
  return bol;
  }

2、 通过传入一个函数解决这个问题。
代码
function getAjaxReturn(success_function,fail_function)
{
       var bol=false;
  $.ajax({
    type:"POST",
    url:"ajax/userexist.aspx",
    data:"username="+vusername.value,
    success:function(msg){
    if(msg=="ok"){   
   showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false)
success_function(msg);
    }
    else
    {    
    showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false);
      vusername.className="bigwrong";
fail_function(msg);
      //return false;
    }
    }
  });
function success_function(info)
{
//do what you want do
alert(info);
}
funciont fail_function(info)
{
//do what you  want do
alert(info);
}

按需选择自己需要的方案吧。一般大网站都采用第2种传入函数的方式,来处理成功和失败情况下的页面提示。

ajax js 保存值问题?

通过ajax 查询数据:如何保存上次查询的值,然后和本次查询到的值进行累加显示出来?先谢谢了
 

解决方案 »

  1.  

    Cookie,或者隐藏控件,
    隐藏控件应该简单一点
      

     

  2.  

    定义 js变量.
    var yourvalue = 0;
    //ajax取得值 
    yourvalue  = yourvalue + ajaxvalue;
      

     

  3.  

    AJAX脚本运行,那么可以定义一个客户端脚本变量保存,这个最简单易行.
      

另外,jquery中各个事件执行顺序如下:

1.ajaxStart(全局事件)

2.beforeSend

3.ajaxSend(全局事件)

4.success

5.ajaxSuccess(全局事件)

6.error

7.ajaxError (全局事件)

8.complete

9.ajaxComplete(全局事件)

10.ajaxStop(全局事件)

 

 

posted on 2013-12-29 22:53  imxiu  阅读(736)  评论(0编辑  收藏  举报

导航