Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的函数没有';t返回正确的值_Javascript_Jquery - Fatal编程技术网

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