我在使用以下功能时遇到问题:
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
答案 0 :(得分:2)
正如您已经了解到的那样,您将无法将return
与$.get()
等异步函数一起使用。 return
之后的$.get()
语句将在请求实际完成之前发生。
您可以做的一个选项是调整函数以接受自己的回调。另一个是return
一个Deferred/Promise,因此调用代码可以应用回调本身。
更好的方法是支持$.get()
和其他Ajax方法。
function getLengthData(date, driverId, callback) {
return $.get('http://xx/x/x/' + date + '/' + driverId + '')
.then(function (data) {
return data.length;
})
.done(callback);
}
getLengthData('2013-07-31', '1234', function (length) {
// use `length` here
});
getLengthData('2013-07-31', '1234').done(function (length) {
// use `length` here
});
此代码段确实需要jQuery 1.8+,因为它使用了chaining deferreds with .then()
。简而言之,return data.length
中的getLengthData
只会更改任何进一步.done()
回调的参数,例如callback
。
答案 1 :(得分:0)
您确定您的主机和端口符合http://194.78.58.118:9001
吗?
这可能是Same origin policy问题。
修改强>
AJAX是异步 JavaScript和XML。因此,在之前返回值,您将从服务器获得响应。