使用D3 Xhr调用Perl脚本

时间:2014-03-31 09:25:56

标签: javascript json d3.js nvd3.js mod-perl

我有一个带有HTML表单的Web应用程序。当我按下提交时,我想将此表单中的值提交给perl脚本parseDatabaseData_v2.pl,该脚本从数据库获取数据并创建该数据的JSON字符串。

然后,我想使用D3图形来显示这个JSON数据。 以下使用jquery ajax的代码可以正常工作,并按预期从perl脚本返回JSON。

    var runFromDate = $('#runDateSelectBox1').val();
    var runToDate = $('#runDateSelectBox2').val();
    var barcode = $('#barcodesSelectBox').val();

    var dataString = 'runFromDate='+ runFromDate + '&runToDate=' + runToDate + '&barcode=' + barcode;

    // ajax command
    $.ajax({
        type: 'POST',
        url: './cgi-bin/parseDatabaseData_v2.pl',
        async: true,
        data: dataString,
        dataType: "json",
        success: function(data) {
              console.log("succesfully called script");

        }
    }); // end of ajax command

在perl脚本中,我使用cgi->param('runFromDate');来获取已发布的参数。

但是,由于我使用NVD3 lineWithFocusChart可视化数据,我想使用d3.xhr调用脚本。

当我创建以下d3.xhr请求时,脚本不起作用(它被调用,但无法获取参数)。

    var runFromDate = document.getElementById("runDateSelectBox1").value;
    var runToDate = document.getElementById("runDateSelectBox2").value;
    var barcode = document.getElementById("barcodesSelectBox").value;

    var dataString = 'runFromDate='+ runFromDate + '&runToDate=' + runToDate + '&barcode=' + barcode;

    d3.xhr("./cgi-bin/parseDatabaseData_v2.pl")
      .header("Content-Type", "application/x-www-form-url-encoded")
      .post(dataString,function(error, data){
          console.log("succesfully called script");
              console.log(data);
      });

我已经尝试了各种格式化数据字符串的方法,包括将其格式化为JSON,如the D3 API Reference中所述。

如果有人愿意帮助我,我将非常感激。

谢谢,

柯恩

1 个答案:

答案 0 :(得分:0)

你在url和编码之间有一个虚假的连字符!

更改

.header("Content-Type", "application/x-www-form-url-encoded")

.header("Content-Type", "application/x-www-form-urlencoded")

看起来你不是this other recent answer所展示的唯一一个。似乎有令人讨厌的代码已经在d3.js wiki中,所以我也更新了它。