Javascript 我的函数没有';t返回正确的值
我在以下功能方面遇到问题:Javascript 我的函数没有';t返回正确的值,javascript,jquery,Javascript,Jquery,我在以下功能方面遇到问题: function getLengthData(date, driverId) { var length = []; $ .get('http://xx/x/x/' + date + '/' + driverId + '') .done(function (data) { var test = data.length; length.push(test); }); return length
function getLengthData(date, driverId) {
var length = [];
$
.get('http://xx/x/x/' + date + '/' + driverId + '')
.done(function (data) {
var test = data.length;
length.push(test);
});
return length;
}
这将不返回任何内容,而它应该返回一个包含1个元素(数据数组的长度)的数组。下一个函数使用相同的方式,工作非常完美:
function getStopsFromStorage() {
var stops = [];
_2XLMobileApp.db.stopsData.load().done(function (result) {
$.each(result, function () {
stops.push(this.Id);
});
})
return stops;
}
我有点知道问题是什么,但不知道如何解决
任何帮助都将不胜感激
Thx您确定您的主机和端口在
http://194.78.58.118:9001
这可能是个问题
编辑:
是异步的JavaScript和XML。因此,在从服务器获得响应之前,您将返回值。正如您已经了解到的,您将无法将
返回
与异步函数一起使用,如$.get()
。$.get()
之后的return
语句将在请求实际完成之前出现
您可以做的一个选择是调整函数以接受它自己的回调。另一种方法是返回
a,以便调用代码可以应用回调本身
更好的方法可能是同时支持$.get()
和其他Ajax方法
function getLengthData(date, driverId, callback) {
return $.get('http://xx/x/x/' + date + '/' + driverId + '')
.then(function (data) {
return data.length;
})
.done(callback);
}
这个代码段确实需要jQuery 1.8+,因为它使用了。简而言之,getLengthData
中的返回data.length
只是更改任何进一步的.done()
回调的参数,例如回调
示例:您的“网络和控制台”窗格在调试器中显示了什么?您可能遇到了同步调用和异步调用之间的差异。这不是异步问题吗。get是异步的,因此在执行过程中继续执行并返回空数组(您说什么也没有返回,但您确定它不是空数组吗?)。只有当get返回时,长度才真正改变,太晚了,对你来说没有用处…@JonathanLonowski:OP说一个调用有效,所以我认为
\u 2XLMobileApp.db.stopsData.load().done
实际上是同步的。@JonathanLonowski:是的,它是一个空数组,这就是我的意思。好的,我理解这个问题。忘了AJAX。乔纳森,你有这样的例子吗?是的,这不是问题所在。在get请求的done函数中,我可以得到长度。嗯,是的,可能就是这样。不管怎样,我是否可以解决这个问题,或者尝试找到另一种方法?你需要找到另一种方法。例如,将所有需要此变量的代码放在函数范围内,并在AJAX成功时调用此函数。没有其他方法可以处理异步请求。
getLengthData('2013-07-31', '1234', function (length) {
// use `length` here
});
getLengthData('2013-07-31', '1234').done(function (length) {
// use `length` here
});