【问题标题】:Looping javascript get requests循环javascript获取请求
【发布时间】:2009-12-21 23:08:51
【问题描述】:

我有一个 javascript 101 问题。

我正在使用一个不错的图形库 (flot),并在单个页面上绘制多个图形。每个图表都是一个 div,带有一个属性集,告诉图表从哪里获取数据。例如,HTML 可能是:

<div class="line-chart" data-src='/revenue.js'></div>
<div class="scatter-chart" data-src='/users/byweek.js'></div>
<div class="scatter-chart2" data-src='/apps/byweek.js'></div>

我在这里有两种类型的图表,散点图和折线图。理想情况下,我能够遍历类,并简单地获取适当的数据。但是,我对回调的上下文感到困惑,并且不知道我实际上在哪个 div 中,所以我在我的 JS 中做这个 hack:

$(document).ready(function() {

    $('.line-chart').each(function() {
        $.getJSON($(this).attr('data-src'),
        function(data) {
            $.plot($('.line-chart'), [data], { xaxis: { mode: "time" }});
        });
    });

    $('.scatter-chart').each(function() {
        $.getJSON($(this).attr('data-src'),
        function(data) {
            $.plot($('.scatter-chart'), [data], { xaxis: { mode: "time" },
                                                  lines: { show: false },
                                                  points: { show: true }
            });
        });
    });

    $('.scatter-chart2').each(function() {
        $.getJSON($(this).attr('data-src'),
        function(data) {
            $.plot($('.scatter-chart2'), [data], { xaxis: { mode: "time" },
                                                  lines: { show: false },
                                                  points: { show: true }
            });
        });
    });
});

我确定我可以清理它,但我只是不清楚如何去做。主要问题是 $.plot 需要应用于调用 getJSON 的特定图表,而不是它找到的第一个图表。

【问题讨论】:

    标签: javascript jquery json dry


    【解决方案1】:

    如果您不确定回调的上下文,那么无论如何不要使用该上下文可能会更干净。您可以改用 each() 循环的上下文:

    $('.line-chart').each(function() {
      var self = $(this);
      $.getJSON(self.attr('data-src'),
        function(data) {
            $.plot(self, [data], { xaxis: { mode: "time" }});
        });
    });
    

    【讨论】:

    • 很好,就像我担心的那样简单。这正是我一直在寻找的。谢谢!
    【解决方案2】:
    $(function() {
          function plotChart(selector, options) {
            $(selector).each(function() {
              var $this = $(this);
              $.getJSON($this.attr('data-src'), function(data) {
                $.plot($this, [data], options);
              });
            });
          }
    
          plotChart('.line-chart', { xaxis: { mode: "time" });
              plotChart('.scatter-chart', {
                  xaxis: {
                    mode: "time"
                  },
                  lines: {
                    show: false
                  },
                  points: {
                    show: true
                  });
    
                plotChart('.scatter-chart2', {
                    xaxis: {
                      mode: "time"
                    },
                    lines: {
                      show: false
                    },
                    points: {
                      show: true
                    });
    
                });
    

    比较干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多