从函数ajax返回

时间:2011-03-21 18:15:23

标签: javascript jquery

如果我有数据验证,我在这里遇到问题。更多的函数$ ajax jquery没有返回true和false的值,知道我怎么能解决这个问题?

示例代码:

function ret(as){
    ....codes...
     $.ajax({
        type: "POST",
        url: "../../03",
        data: "as="+as,
        success: function (msg) {
          if(msg == 'true' ){
           ..codes..
           return true;  
          }else{
           ..codes..
           return false;
          }
        } 
    });
  }

示例电话:

var check= ret("user");

if(check== true){
  ..run ..
}

3 个答案:

答案 0 :(得分:2)

默认情况下,ajax调用是异步的 - 实际上是'A'代表的。这意味着你的ret函数将在调用success函数之前返回。您有两种方法可以解决问题:

  1. 让您的ajax调用同步 - 请参阅http://api.jquery.com/jQuery.ajax/处的异步选项。这几乎总是一个坏主意,因为整个页面将阻塞,直到调用返回
  2. 反转控制流,以便在调用成功回调时发生所需的行为。您可以通过将函数传递给ret:

    来完成此操作

    function(as,successHandler){     ...

    success: function(msg) {
        successHandler(msg == 'true');
    }
    

答案 1 :(得分:1)

用户想要在jQuery对象之外传输true / false响应,以便该函数可以返回它。有些情况下你真的需要函数来返回一些东西而不是调用回调。

即使jQuery调用是同步的(即'async:false'),上面的示例代码也不起作用,但是你的调用必须明确指定为同步。

正确的方法是将jQuery对象附加到变量:

var obj = jQuery.ajax({ 'async:false', (...)

然后,在函数结束时,在jQuery对象右括号后,添加到函数中:

return obj.responseText;

答案 2 :(得分:0)

Ajax是异步的。你不能使用返回值。您必须使用回调:

ret("user", function(check) {
  if (check == true)
    .. run ..
});

您可以像这样实施ret

function ret(as, callback) {
  ....codes...
   $.ajax({
      type: "POST",
      url: "../../03",
      data: "as="+as,
      success: function (msg) {
        if(msg == 'true' ){
         ..codes..
         callback(true);
        }else{
         ..codes..
         callback(false);
        }
      } 
  });
}

另一种选择是强制请求同步,但这并不是真正的惯用方法。