返回 AJAX 调用数据的 JavaScript 函数

IT技术 javascript ajax jquery
2021-03-05 17:59:59

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

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

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

6个回答

您不能返回 AJAX 调用返回的数据,除非您想同步调用它(并且您不想 - 相信我)。但是你可以返回的是一个AJAX 调用返回的数据Promise,你可以用一种非常优雅的方式来实现它。

更新: 请注意,当前 jQuery Promises 与Promises/A+ 规范不兼容-此答案中的更多信息。)

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

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

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

checkUserIdExists(userid).success(function (data) {
    // do something with data
});

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

+1。我的答案的不那么懒惰的版本:)
2021-05-10 17:59:59

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

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

checkUserIdExists(4, function(data) {

});
这里有一件重要的事情。您必须async: false$.ajax方法中添加属性如果不是,您不会将数据放入global var. 这是一个额外的信息。
2021-04-21 17:59:59
+1 - 这就是我的想法,但在一个干净、简洁的代码示例中。
2021-05-12 17:59:59

在 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"); });

来源

如何从此变量 jqxhr 读取 json 数据
2021-05-11 17:59:59

从 jQuery 1.8 开始,不推荐使用“success”、“error”和“complete”回调。相反,您应该使用“完成”、“失败”和“始终”。

所以你可以有:

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
});

这并不是 JavaScript 异步编程的真正目的。相反,在成功函数中使用回调来调用另一个函数以使用从服务器返回的数据。

+1 思考我在想什么
2021-04-25 17:59:59