2

可能重复:
jQuery:ajax 调用成功后返回数据
jQuery AJAX:成功时返回值

我不明白为什么goodPassword总是返回undefined 我确定这只是一个愚蠢的错误,并会感谢你的回答

function foo(){
    var goodPassword;
    jQuery.ajax({
        data: "action=Potato",
        url: 'servletPotato',
        timeout: 2000,
        error: function() {
            console.log("Failed to send ajax");
        },
        success: function(r) {
            var data = jQuery.parseJSON(r);
            if(data.aprovePassword == "true")
            {
                goodPassword = true;
            }
            else
            {
                goodPassword = false;
            }
        }
    });
    return goodPassword;
}

ajax 调用肯定有效,并且 data.aprovePassword 肯定从 servlet 返回为“false”

4

3 回答 3

2

因为goodPassword还没有分配任何东西,因为 XHR 请求在函数结束后执行,这就是为什么到函数结束时,没有分配任何东西。另一种功能是:

function foo(successCallback) {
    var goodPassword;
     jQuery.ajax({
         data: "action=Potato",
         url: 'servletPotato',
         timeout: 2000,
         error: function() {
            console.log("Failed to send ajax");
         },
         success: function(r) {
            var data = jQuery.parseJSON(r);
            if(data.aprovePassword == "true")
                {
                    goodPassword = true;
                }
            else
                {
                    goodPassword = false;
                }
            successCallback(goodPassword);
       }});
  }
于 2012-08-18T14:13:07.933 回答
1

问题是 ajax 请求是异步的,所以函数在启动 jQuery.ajax 调用后立即返回,此时 goodPassword 仍然未定义。

相反,您需要执行以下操作:

function foo(callback) {
    var goodPassword;

    jQuery.ajax({
     data: "action=Potato",
     url: 'servletPotato',
     timeout: 2000,
     error: function() {
        console.log("Failed to send ajax");
     },
     success: function(r) {
        var data = jQuery.parseJSON(r);

        if(data.aprovePassword == "true") {
                goodPassword = true;
        } else {
                goodPassword = false;
        }

        callback(goodPassword);
   }});
}

然后,您将像这样调用该函数:

foo(function(goodPassword) {
    console.log('goodPassword is ' + goodPassword);
});
于 2012-08-18T14:17:17.360 回答
0

您无法检查返回值,因为函数返回后发生 ajax 调用。

要执行两项操作,一项针对成功,一项针对失败,您需要执行以下操作:-

var foo = function(goodCallback, badCallback){
  jQuery.ajax({
    data: "action=Potato",
    url: 'servletPotato',
    timeout: 2000,
    error: function() {
      console.log("Failed to send ajax");
    },
    success: function(r) {
      var data = jQuery.parseJSON(r);
      if(data.aprovePassword == "true")
      {
        goodCallback();
      }
      else
      {
        badCallback();
      }
    }
  });
};

foo(
  function() {
    console.log('dude good password');
  },
  function() {
    console.log('bad password');
  }
);

或只有 1 个回调函数采用 goodpassword 的布尔值...

于 2012-08-18T14:20:26.723 回答