如何使用Jquery异步Ajax调用从函数返回True或False

时间:2016-03-15 08:29:19

标签: jquery ajax asynchronous promise

我希望以下函数根据我的逻辑返回true或false,但函数返回undefined。

function getUserData() {
    $.ajax({
    type: 'POST',
    contentType: 'application/json',
    url: 'myservice',
    dataType: "JSON",
    success: function (data) {
        if (data.d.UserID > 0) {
            return true;
        } else {
            return false
        }
        return false;
    },
    error: function (error) {
        return false;
    }
});};
if (getUserData()) {
//do something
} else {
//redirect
}

请不要认为它是重复的,它是不同的,我不想根据那些回调函数返回我想要返回true或false的回调函数。

2 个答案:

答案 0 :(得分:0)

试试这个:

function getUserData(callback) {
    $.ajax({
        type: 'POST',
        contentType: 'application/json',
        url: 'myservice',
        dataType: "JSON",
        success: function (data) {
            if (data.d.UserID > 0) {
                callback(true);
            } else {
                callback(false);
            }
            callback(false);
        },
        error: function (error) {
            callback(false);
        }
    });
};

getUserData(function(status) {
    if (status) {
    //do something
    } else {
    //redirect
    }
});

答案 1 :(得分:0)

使用下面的代码可以解决您的问题:创建一个函数,它应该返回defferd对象。

  function AJAX(type,url){

   this.type=type;      // EX: GET , POST
   this.url=url;

this.invoke = function(){
var deferred = $.Deferred();
$.ajax({
    type: this.type,
    url: this.url,      
    contentType: 'application/json',
    dataType:"JSON"
    success: function(response){
        deferred.resolve(response);
    },
    error: function(exception){
        console.log("Ajax call returned error.");
         deferred.reject(exception);
    }
});

return deferred;

};
}

现在使用适当的参数调用此函数,如下所示

 var ajax=new AJAX("POST","Your action");
 ajax.invoke().then(function(data){
       if(data==true){
         // Your code for true
          }else{
         // your code for false
         }
  });

现在您可以根据需要修改功能..