что не так с этим автоматическим созданием графиков для времени, проведенного на веб-страницах? - PullRequest
0 голосов
/ 03 декабря 2011

! Решено!

Я хочу автоматически создавать диаграммы с пользователями и их временем, проведенным на страницах веб-сайта.

У меня есть файл - «log.xml», в котором я храню информацию о пользователях (клиентах), посещенных страницах, датах и ​​их затраченном времени;и после того, как я "получил" этот XML-файл с помощью Ajax, я хочу проанализировать его и создать со значениями "извлеченные" диаграммы с помощью JqPlot.

Моя проблема заключается в том, что я не могу выполнить циклболее чем один клиент, и он не создает диаграмму для одного клиента.

Если I удалить кодовый блок с инициализацией переменной plot I может зацикливаться через всех моих клиентов из Xml.

Пожалуйста, если кто-то может сказать мне, что не так, и как создавать диаграммы для всех клиентов ...

Вот код файла " log.xml":

<?xml version="1.0"?>
<log>
  <customer id="14" name="Florin Virdol">
    <page name="/mobilestore/index.php">
      <date_ts on="2011-12-02" timeSpent="205"/>
    </page>
    <page name="/mobilestore/products_all.php">
      <date_ts on="2011-12-02" timeSpent="15"/>
    </page>
  </customer>
  <customer id="0" name="guest">
   <page name="/mobilestore/services.php">
      <date_ts on="2011-12-02" timeSpent="50"/>
    </page>
  </customer>
</log>

Вот код JavaScript" операций ":

$(document).ready(function()
{
    //read from xml
    $.ajax({
        type: "GET",
        url: "log.xml",
        dataType: "xml",
        success: parseXml
    });
});//ready          

//parse xml          
function parseXml(xml) {
    var i = 0;
    $(xml).find("customer").each(function() {
        $('<div class = "jqplot graph" id = "chart' + i + '"></div>').appendTo('#content');
        var customerName = $(this).attr("name");                                     
        var line_inside = [];  // declare as array               
        $(this).find("page").each(function() {
          var pageName = $(this).attr("name"); 
          $(this).find("date_ts").each(function() {
            var timeSpent_ = $(this).attr("timeSpent");//if mai multe timespent, sa faca totalul, else singuru; timespent
            line_inside.push([pageName,timeSpent_]); //do not string cat, push onto array
          });                        
        });                    
        var line = '[' + line_inside + ']';
        //--------jqplot----!!! if i remove this block, will loop through customers------------
        var plot = $.jqplot('chart' + i, [line_inside], 
        {                            
            title: customerName,
            series:[{renderer:$.jqplot.BarRenderer}],
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer,
                    label: 'Web Page',
                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                    tickOptions: { labelPosition:'middle',  angle: -30 }  
                },
                yaxis: {
                    autoscale:true,
                    label: 'Total Time Spent',
                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                    tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                    tickOptions: { labelPosition:'middle', angle: -30 }
                }
            }
        });
        //-------jqplot----!!! if i remove this block, will loop through customers------------                                
        i++;
    });//find customer            
}//parse xml    

РЕШЕНИЕ : внесены изменениячто Марк предложил, и это работает.(теперь вышеприведенный код работает!)

Ответы [ 2 ]

0 голосов
/ 03 декабря 2011

Вы передаете строки, которые выглядят как массивы, а не как массивы, в jqplot.

Попробуйте

var line_inside = [];  // declare as array               
$(this).find("page").each(function() {
  var pageName = $(this).attr("name"); 
  $(this).find("date_ts").each(function() {
    var timeSpent_ = $(this).attr("timeSpent");//if mai multe timespent, sa faca totalul, else singuru; timespent
    line_inside.push([pageName,timeSpent_]); //do not string cat, push onto array
  });                        
});
alert(line_inside); // this is an array of arrays                                   
var plot = $.jqplot('chart' + i, [line_inside], 
0 голосов
/ 03 декабря 2011

Поскольку для каждого клиента требуется отдельный график, вам нужно сделать plot локальным переменным для встроенной функции: «var plot», а не просто «plot» - то же самое относится и к «line». Вы назначаете глобальную переменную области действия и перезаписываете ее каждый раз, в настоящее время.

...