Javascript 如何访问此ajax请求的返回值?
我有这个密码Javascript 如何访问此ajax请求的返回值?,javascript,jquery,ajax,namespaces,Javascript,Jquery,Ajax,Namespaces,我有这个密码 var stats = { GetMetaData : function() { var url = 'http://www.bungie.net/api/reach/reachapijson.svc/game/metadata/'+storage.get('apikey'); $.ajax({ url: url, success: function(data) {
var stats = {
GetMetaData : function() {
var url = 'http://www.bungie.net/api/reach/reachapijson.svc/game/metadata/'+storage.get('apikey');
$.ajax({
url: url,
success: function(data) {
return data;
}
});
return 'abc';
}
}
我使用stats.GetMetaData()调用函数代码>
我希望返回的值是ajax请求中的data
变量。
但是它是字符串“abc”,这是为什么
如何返回数据
变量
我尝试执行
return$.ajax({
但这只是返回函数代码。因为jquery ajax请求默认是异步的。您可以使用async:false
选项或(更好)使用回调函数使请求同步。另外,正如CharlesLeaf所述,使用同步请求将锁定浏览器,直到收到响应为止
我想从jquery站点链接一些解释,但它现在似乎已关闭。您将无法处理从
成功
回调返回的返回值,原因如下:
- 首先,您的
语句是从returndata
回调返回的,而不是从外部success
函数返回的GetMetaData
- 但是另外,当调用
回调时,成功
函数将已经返回。请记住,GetMetaData
默认为异步(非阻塞)。异步是中的A$.ajax()
您应该直接在回调中处理响应
数据
,或者调用一个helper函数来处理响应。因为函数是JavaScript中的头等公民,所以您可以传递这个“helper函数”作为GetMetaData
函数的参数,as.由于请求将是异步的,因此访问数据的方法是通过回调函数,在本例中,回调函数是分配给success
属性的函数。您可以使请求同步,但这是一个阻塞调用,我不建议将其作为br在请求返回之前,owser一直处于锁定状态。AJAX调用是异步的,这意味着调用会立即返回,并且在数据到达时会调用回调函数。由于GetMetaData
方法已经完成,回调返回的值将被忽略
var stats = {
GetMetaData : function() {
var url = 'http://www.bungie.net/api/reach/reachapijson.svc/game/metadata/'+storage.get('apikey');
var result;
$.ajax({
url: url,
async: false,
success: function(data) {
result = data;
}
});
return result;
}
}
您可以使调用同步,但如果可能,您应该避免这种情况,因为它会在响应到达之前冻结浏览器。通常的方法是使用回调函数
向方法添加回调:
var stats = {
GetMetaData : function(callback) {
var url = 'http://www.bungie.net/api/reach/reachapijson.svc/game/metadata/'+storage.get('apikey');
$.ajax({
url: url,
success: callback
});
}
}
使用以下命令调用它:
stats.GetMetaData(function(data){
// do something with the data
});
在success函数中,调用将处理数据的javascript函数,即:
success: function(data) {
DoSomthingWithThe(data);
}
...
function DoSomethingWithThe(data) {
// Do something useful
}
您的问题是AJAX调用是异步的,因此在GetMetaData函数退出后的一段时间内,当远程服务器返回数据时,才会调用“success”。您可以选择同步并等待响应,但最好使用如上所述的回调函数。对良好的answ进行小的补充呃;同步请求将锁定您的浏览器,直到它完成。这对用户体验没有帮助;)在这种情况下,在请求完成之前,实际上不允许发生任何事情,因为整个扩展需要数据(它包含图像URL等)。因此,强制将其同步非常有用。此外,我如何处理回调函数,因为该函数将在所有地方使用以获取数据,并且它是所需的响应对象。(我知道有人会说缓存它,我是,但有几种类似的函数。)@Hailwood:强制同步从来都不是(让我们说很少)在浏览器脚本编写中有用。如果服务器需要2秒的响应时间,web界面将冻结2秒。请记住,JavaScript与页面呈现共享同一个线程。阻塞(同步)操作,如长的
循环,而循环会冻结浏览器。@Hailwood-强制它同步很有用,缺点是如果请求从未完成,浏览器将保持锁定状态。