JavaScript function that returns AJAX call data
本问题已经有最佳答案,请猛点这里访问。
我想创建一个javascript函数,它返回jquery-ajax调用的值。我想要像这样的东西。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function checkUserIdExists(userid){ return $.ajax({ url: 'theurl', type: 'GET', cache: false, data: { userid: userid }, success: function(data){ return data; } }); } |
我知道我可以通过将async设置为false来实现这一点,但我宁愿不这样做。
您不能返回Ajax调用返回的数据,除非您想同步调用它(而且您不信任我)。但您可以返回的是Ajax调用返回的数据,实际上您可以以非常优雅的方式进行。
(更新:请注意,当前jquery承诺与promises/a+规范不兼容-有关详细信息,请参阅此答案。)
基本上,您可以返回您的$.Ajax(…)调用的返回值:
1 2 3 4 5 6 7 8 9 10 | function checkUserIdExists(userid){ return $.ajax({ url: 'theurl', type: 'GET', cache: false, data: { userid: userid } }); } |
调用函数的人可以这样使用它:
1 2 3 | checkUserIdExists(userid).success(function (data) { // do something with data }); |
如果您感兴趣的话,请参阅我的这篇文章以获得更好的解释和演示。
可以传入回调函数:
1 2 3 4 5 6 7 8 9 10 | function checkUserIdExists(userid, callback) { $.ajax({ ... success: callback }); } checkUserIdExists(4, function(data) { }); |
从jquery 1.8开始,"success"、"error"和"complete"回调被弃用。相反,您应该使用"完成"、"失败"和"始终"。
所以你可以:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 }); |
使用jquery 1.5,您可以使用全新的
1
2
3
4
5
6
7
8
9
10
11 // 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"); });
来源
这不是Javascript异步编程真正要做的事情。相反,在success函数中使用回调来调用另一个函数来使用从服务器返回的数据。
蒂姆,这两种情况是互斥的;异步操作既不能用于任何目的,也不能检索返回的数据。
您应该为Ajax调用查看一个支持事件的基础结构。