为什么jQuery cookie插件没有将float变量保存为值?

时间:2014-07-29 13:48:19

标签: javascript jquery cookies

我不确定它是否与float变量有关,但我这样做:

if ($.cookie('latitude') == undefined && $.cookie('longitude') == undefined) {
    if (window.location.search.indexOf('latitude') <= -1 || (window.location.search.indexOf('longitude') <= -1)) {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function (position) {
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;
                window.location.replace(window.location.pathname + '?latitude=' + latitude + '&longitude=' + longitude);
            }, function (position) {
                window.location.replace(window.location.pathname + '?latitude=error&longitude=error');
            }, timeout = 7000);
            $.cookie('latitude', latitude, {expires: 7, path: '/'});
            $.cookie('longitude', longitude, {expires: 7, path: '/'});
        }
    }
}

但是最后两行创建的cookie未定义。我一直在努力工作,所以我可能会遗漏一些愚蠢的东西。

1 个答案:

答案 0 :(得分:1)

您的问题是 promises 的常见错误。您必须在getCurrentPosition回调中设置Cookie,其中定义了变量latitudelongitude。在那里,那些变量将永远是未定义的,因为它们将超出其范围:

if ($.cookie('latitude') == undefined && $.cookie('longitude') == undefined) {
    if (window.location.search.indexOf('latitude') <= -1 || (window.location.search.indexOf('longitude') <= -1)) {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function (position) {
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;
                window.location.replace(window.location.pathname + '?latitude=' + latitude + '&longitude=' + longitude);

                $.cookie('latitude', latitude, {expires: 7, path: '/'});
                $.cookie('longitude', longitude, {expires: 7, path: '/'});
            }, function (position) {
                window.location.replace(window.location.pathname + '?latitude=error&longitude=error');
            }, timeout = 7000);
        }
    }
}

这应该有用。