2011-03-01 89 views
19

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

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

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

+0

有什么问题吗? – Nathan 2011-03-01 04:55:22

回答

6

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

Source

+0

如何从此变量读取json数据jqxhr – numerah 2015-10-30 10:19:52

3

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

+0

+1思考我在想什么 – 2011-03-01 05:04:43

12

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

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

checkUserIdExists(4, function(data) { 

}); 
+0

+1 - 这就是我的想法,但在一个干净,简洁的代码示例。 – jmort253 2011-03-01 05:00:01

+0

这里有一件重要的事情。您必须在'$ .ajax'方法中添加'async:false'属性。如果不是,则不会将数据获取到'global var'中。这是一个额外的信息。 – 2015-11-27 09:05:38

30

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

更新: 请注意,目前jQuery的承诺不与Promises/A+ specification兼容 - 在this answer更多信息)

基本上,你可以回到你的$阿贾克斯的返回值(...)拨打:

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

和别人谁调用你的函数可以使用这样的:

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

如果您有兴趣,请参阅this post of mine以获得更好的解释和演示。

+3

+1。我的答案的懒惰版:) – 2011-03-01 05:12:02

2

添,这两种情况是互相排斥的;异步操作不会有任何目的,也不能检索返回的数据。

你应该看看你的AJAX启用事件的基础设施要求

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