返回AJAX调用数据的JavaScript函数

Tim*_*hle 24 javascript ajax jquery

我想创建一个JavaScript函数,它返回jQuery AJAX调用的值.我想要这样的东西.

function checkUserIdExists(userid){
    return $.ajax({
        url: 'theurl',
        type: 'GET',
        cache: false,
        data: {
           userid: userid
        },
        success: function(data){
            return data;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过将async设置为false来做到这一点,但我宁愿不这样做.

rsp*_*rsp 31

你不能返回AJAX调用返回的数据,除非你想同步调用它(你不相信我 - 相信我).但是你可以返回的是对AJAX调用返回的数据的承诺,你可以以非常优雅的方式实现它.

(更新: 请注意,目前jQuery Promises与Promises/A +规范不兼容- 在这个答案中有更多信息.)

基本上你可以返回$ .ajax(...)调用的返回值:

function checkUserIdExists(userid){
    return $.ajax({
        url: 'theurl',
        type: 'GET',
        cache: false,
        data: {
           userid: userid
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

并且调用您的函数的人可以像这样使用它:

checkUserIdExists(userid).success(function (data) {
    // do something with data
});
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣,请参阅我的这篇文章以获得更好的解释和演示.

  • +1.我的答案的一个不太懒的版本:) (4认同)

Ome*_*ari 16

你可以传入一个回调函数:

function checkUserIdExists(userid, callback) {
    $.ajax({
        ...
        success: callback
    });
}

checkUserIdExists(4, function(data) {

});
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 8

使用jQuery 1.5,您可以使用全新$.Deferred功能,这正是为此而设计的.

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax({ url: "example.php" })
    .success(function() { alert("success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
Run Code Online (Sandbox Code Playgroud)

资源


小智 7

从jQuery 1.8开始,不推荐使用"成功","错误"和"完整"回调.相反,你应该使用"完成","失败"和"永远".

所以你可以:

function checkUserIdExists(userid, callback) {
        return $.ajax({
        url: 'theurl',
        type: 'GET',
        cache: false,
        data: {
           userid: userid
        }
    })
    .done(callback)
    .fail(function(jqXHR, textStatus, errorThrown) {
        // Handle error
    });
}

checkUserIdExists(2, function(data) {
    console.log(data); // Do what you want with the data returned
});
Run Code Online (Sandbox Code Playgroud)