jQuery:如何在AJAX调用中执行回调

时间:2011-11-25 12:08:18

标签: javascript jquery

我有一个带有AJAX调用的函数,我需要能够调用该函数,如果AJAX请求成功则返回true,否则返回false。

我知道以下内容不起作用,因为返回超出了exampleFunc()

的范围
function exampleFunc() {
  $.ajax({
    url: 'http://example.com/page',
    success: function(data, textStatus, XMLHttpRequest){
      return true;
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      return false;
    }
  });
}

我用谷歌搜索解决方案并相信我应该做一个回调但似乎无法达到预期的结果。

编辑:更具体一点我要求函数返回true或false,因为我的用例目前让我这样做:

if (exampleFunc()) { 
  // run this code
}

5 个答案:

答案 0 :(得分:2)

您无法从异步中返回。回调函数必须按照向前的方向执行您想要执行的操作。

答案 1 :(得分:1)

只需将该功能传递给您的exampleFunc(),然后在您的ajax成功回拨中调用它。

// you want this function to be run on ajax success.
function sayHello() {
   alert('hello'); 
}

function exampleFunc(callback) {
  $.ajax({
    url: 'http://example.com/page',
    success: function(data, textStatus, XMLHttpRequest){
      if (callback && typeof callback == 'function') {
         callback() // here, you call sayHello, which is passed as parameter
      }
      return true;
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      return false;
    }
  });
}

exampleFun(sayHello); // start ajax

答案 2 :(得分:0)

function exampleFunc() {
  $.ajax({
    url: 'http://example.com/page',
    async: false,
    success: function(data, textStatus, XMLHttpRequest){
      return true;
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      return false;
    }
  });
}

注意async: false

答案 3 :(得分:0)

$.ajax是一个异步调用,它将在成功/错误响应时具有回调处理程序。要解决此问题,您需要传递回调。

function exampleFunc(callback, errorCallback) {
  $.ajax({
    url: 'http://example.com/page',
    success: callback,
    error: errorCallback
  });
}

USAGE

exampleFunc(function(data, textStatus, XMLHttpRequest) {
      // do whatever you want, you have got a success response
      //return true;
    }, function (XMLHttpRequest, textStatus, errorThrown) {
      // error occured, show some red error box
      //return false;
    });

答案 4 :(得分:-1)

只有在您具有以下同步功能时才能执行此操作:

function exampleFunc() {
  var success;
  $.ajax({
    async : false,
    url: 'http://example.com/page',
    success: function(data, textStatus, XMLHttpRequest){
      success= true;
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      success= false;
    }
  });
  return success;
}

您可以做的是将功能传递给您的功能。类似的东西:

var hello = "Hello World";
exampleFunc(function(){
    alert(hello); // Alerts Hello World on success
},
function(){
    alert("FAILED"); // Alerts FAILED on error
});

该功能如下:

function exampleFunc(success, error) {
  $.ajax({
    url: 'http://example.com/page',
    success: success,
    error: error
  });
}

但是你无法更改函数内的hello var并在函数调用后使用它。因为呼叫保持异步。