我的函数没有返回正确的值

时间:2013-07-31 11:10:26

标签: 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;
}

当它返回一个包含1个元素(数组数组长度)的数组时,它不会返回任何内容。下一个函数使用相同的方式并且完美地运行:

function getStopsFromStorage() {
    var stops = [];
    _2XLMobileApp.db.stopsData.load().done(function (result) {
        $.each(result, function () {
            stops.push(this.Id);
        });
    })
    return stops;
}

我有点知道问题是什么,但不知道如何修复。

非常感谢任何帮助!

THX

2 个答案:

答案 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

示例:http://jsfiddle.net/jMrVP/

答案 1 :(得分:0)

您确定您的主机和端口符合http://194.78.58.118:9001吗?

这可能是Same origin policy问题。

修改

AJAX异步 JavaScript和XML。因此,在之前返回值,您将从服务器获得响应。