【问题标题】:jquery $.grep in deferred object returns Cannot read property 'value' of undefined延迟对象中的 jquery $.grep 返回无法读取未定义的属性“值”
【发布时间】:2018-07-18 00:34:34
【问题描述】:

我在尝试使用 $.grep 获取值时遇到问题

我向 url 发送一个 GET 请求,以将大量日期和值作为 JSON 带回。

然后,在回调函数中,我从 JSON 文件中获取日期和值,并使用延迟对象将结果分配给变量。

一旦 ajax 请求完成,我会遍历原始响应,然后使用 $.grep 过滤 json 变量以获得正确的值。

如果我控制台记录 $.grep 的结果,我会得到正确的值,但我会收到以下错误。

jQuery.Deferred 异常:无法读取未定义的属性“值” TypeError:无法读取未定义的属性“值”

如何从 $.grep 中获取值?

var history;

$.getJSON(window.website_url + 'history', function(response) {

    var series = { 
        name: 'Price Index History', 
        data: []
    };

    var deferreds = [];

    if($('#currency').val() === 'GBP') {

        deferreds.push(
            $.ajax({
                url: window.website_url = 'exchange-rate',
                type: 'get',
                dataType: 'json',
                success: function (data) {
                    history = data;
                }
            })
        );

        $.when.apply($, deferreds).done(function() {

            $.each(response, function(i, item) {

                var date = new Date(item[0]),
                    day;

                if((date.getMonth() + 1) < 10) {
                    day = date.getFullYear() + '-' + '0' + (date.getMonth() + 1) + '-' + date.getDate();
                }
                else {
                    day = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
                }

                var result = $.grep(history, function(e) { return e.date == day; });

                var test = result[0].value;

                series.data.push([item[0], Number(parseFloat(item[1] * result[0].value).toFixed(1))]);
            });
        });
    }
    else {
        $.each(response, function(i, item) {
            series.data.push([item[0], item[1]]);
        });
    }
});

编辑

Here is the json returned the ajax request
[
    {
        "date":"2018-01-30",
        "value":0.706419
    },
    {
        "date":"2018-01-31",
        "value":0.70417
    },
    {
        "date":"2018-02-01",
        "value":0.70095
    },
    {
        "date":"2018-02-02",
        "value":0.70808
    },
    {
        "date":"2018-02-03",
        "value":0.70808
    },
    {
        "date":"2018-02-04",
        "value":0.70871},
    {
        "date":"2018-02-05",
        "value":0.717141
    },
    {
        "date":"2018-02-06",
        "value":0.71645
    },
    {
        "date":"2018-02-07",
        "value":0.716369
    }
]

【问题讨论】:

  • 你能显示你的ajax调用的结果吗?

标签: jquery ajax grep each jquery-deferred


【解决方案1】:

我明白你的问题...

对于一个月中的几天,例如 01 - 09,getDate() 将返回一个数字(即 1、2、3 等)。

对于日期2018-02-06,您将2018-02-062018-01-6 进行比较

使用这样的函数将6替换为06

function day_of_month(d) { 
    return (d.getDate() < 10 ? '0' : '') + d.getDate();
}

比如

day = date.getFullYear() + '-' + '0' + (date.getMonth() + 1) + '-' + day_of_month(getDate());

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 2015-08-07
    • 2020-08-06
    • 1970-01-01
    • 2013-05-27
    • 2021-04-30
    • 1970-01-01
    • 2021-11-26
    • 2018-12-10
    相关资源
    最近更新 更多