使用jQuery ajax返回布尔值

时间:2015-01-27 13:46:15

标签: javascript jquery ajax

我有ajax请求的容器方法:

function postRating(formData) {
    $.ajax({
        type: "POST",
        url: '/api/ratings',
        data: formData
    })
        .done(function () {
            return true
        })
        .fail(function () {
            return false
        })
        .always(function (msg) {
            //console.log(msg);
        });
}

这样称呼:

$('.episode-rating.like').click(function () {
    var formData = $("#episode-rating").serializeArray();
    formData.push({name: 'up', value: 1}, {name: 'down', value: 0});
    console.log(postRating(formData))
});

postRating()会返回undefined。不知道我做错了什么。如果ajax请求成功,我想做一些html处理,否则显示错误。

2 个答案:

答案 0 :(得分:2)

如上所述它是异步的,所以使用回调:

function postRating(formData, cb) {
    $.ajax({
        type: "POST",
        url: '/api/ratings',
        data: formData
    })
        .done(function () {
            cb(true);
        })
        .fail(function () {
            cb(false);
        })
        .always(function (msg) {
            //console.log(msg);
        });
}

然后:

postRating(formData, function(result){
    console.log(result);
})

或者您可以使用承诺:

function postRating(formData, cb) {
    return $.ajax({
        type: "POST",
        url: '/api/ratings',
        data: formData
    });
}

然后:

postRating(formData)
   .done(function(){
        console.log(true);
    })
   .fail(function(){
        console.log(false);
    });

答案 1 :(得分:0)

这是异步调用。如果你想要你可以使你的ajax调用同步,然后你可以从容器返回,否则你必须在容器上实现回调,这些回调在成功,错误和完成时被调用。

// Async = false
function postRating(formData) {
    return $.ajax({
        type: "POST",
        url: '/api/ratings',
        data: formData,
        async: false
    });
}

// Callbacks
function postRating(formData, successCallback) {
    $.ajax({
        type: "POST",
        url: '/api/ratings',
        data: formData,
        success: function (data) {
            successCallback.apply(this, [data]);
        }
    });
}