Javascript 管道值:Ajax+;JQuery
我有一个函数,在这个函数中,我执行一个ajax请求,等待得到响应并返回一个值,但返回的值是未定义的。怎么了Javascript 管道值:Ajax+;JQuery,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个函数,在这个函数中,我执行一个ajax请求,等待得到响应并返回一个值,但返回的值是未定义的。怎么了 function GetVMData(url_s){ return $.ajax({ url: url_s, crossDomain: true, dataType: 'jsonp',
function GetVMData(url_s){
return $.ajax({
url: url_s,
crossDomain: true,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert('failed')
}
}).pipe(function(data) { return data[4]; });
}
如果我在ajax回调中打印数据[4]的值,它会打印正确的值,因此我知道请求正在进行,但当我尝试此操作时:
var cord;
cord = GetVMData(url).done(function(cpu_USG) {
return cpu_USG;
});
alert(cord)
跳线的值是错误的
var cord;
cord = GetVMData(url).done(function(cpu_USG) {
return cpu_USG;
});
alert(cord)
此代码异步运行。因此,您需要执行回调中的所有操作,如:
GetVMData(url).done(function(cpu_USG) {
alert(cpu_USG);
});
在这里:
cord
包含对象,而不是值。顺便说一下,您不知道ajax调用将在哪里完成,所以您应该熟悉回调的概念
例如:
function makeRequest(url, callback) {
$.ajax({
url: url,
crossDomain: true,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert('failed')
},
success: callback
});
}
var do_something = function (data) {
alert(data[4]);
};
cord = makeRequest(url, do_something);
GetVMData函数将从另一个需要cpu_USG值的函数调用,我如何实现这一点。因此,从上一个示例中,跳线将用于绘制图表。@user1454693:那又怎样?你必须像我演示的那样使用它。这就是延迟和异步调用的工作方式,您是说我应该在回调中封装使用该值的所有代码吗?有没有其他方法来实现这一点?@user1454693:延迟解决后(当ajax请求成功完成时发生),回调就会被调用。您可以在回调中获取所有数据,并且只能在回调中获取。附言:延迟使处理ajax变得容易了数百万倍,因此我无法理解您的困惑。您只是重复了我编写的代码。那么我该如何获取该值呢?我还有很多其他部分使用该值,所以我应该将所有这些部分封装在回调中吗?@Speransky Danil:callbacks是他最初拥有的。延迟更容易处理,实际上回调解决方案不会改变anything@user1454693:你为什么要检查这个答案?!你有很好的回调代码,现在你有奇怪的回调代码。无法获取,因为在以后的jquery版本中将不推荐使用o_o回调,因此没有理由使用它it@Speransky丹尼尔:1。延迟是将很快更改回调的内容(回调在1.8中被弃用)2。延期要灵活得多。看看他之前的问题4。如果“straigh hands”=“使用旧的和过时的技术”-那么请随意这样做
function makeRequest(url, callback) {
$.ajax({
url: url,
crossDomain: true,
dataType: 'jsonp',
error: function(xhr, status, error) {
alert('failed')
},
success: callback
});
}
var do_something = function (data) {
alert(data[4]);
};
cord = makeRequest(url, do_something);