English 中文(简体)
Looping javascript get requests
原标题:

I ve got a javascript 101 question.

I m using a nice graphing library (flot), and plotting multiple graphs on a single page. Each graph is a div, with a attribute set that tells the graph where to grab it s data from. For example, the HTML might be:

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

Where I ve got two types of charts here, a scatter and line. Ideally I d be able to iterate over the classes, and simply grab the appropriate data. However, I m confused by the context of the callback, and not knowing which div I m actually in, so instead I m doing this hack in my JS:

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

I m sure I can clean this up, I m just not clear on how to go about doing it. The main problem is that the $.plot needs to apply to the specific chart that the getJSON was called a against, not the first one it finds.

最佳回答

If you are unsure about the context of the callback, it will probably be cleaner not to use that context anyway. You can use the context of your each() loop instead:

$( .line-chart ).each(function() {
  var self = $(this);
  $.getJSON(self.attr( data-src ),
    function(data) {
        $.plot(self, [data], { xaxis: { mode: "time" }});
    });
});
问题回答
$(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
                });

            });

is quite a bit cleaner.





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签