如何在JSREPORT中读取模板内的POST数据

时间:2016-11-08 18:47:31

标签: jsreport

我对jsreport引擎有以下请求:

            $.ajax({
                method: "POST",
                contentType: "application/json",
                dataType: "jsonp",
                url: "http://localhost:5488/api/report",
                data: {
                    template: {
                        shortid: "ry6HoQRee"
                    },
                    data: {
                        "D": "5"
                    }
                },
                success: function (s) {
                    window.open("data:application/pdf,base64," + escape(s.responseText));
                },
                error: function (s) {
                    console.log(s);
                }
            });

但是我找不到在报告模板中阅读它的方法:

<span>{{data.D}}</span>

如何引用POST正文中的数据对象

1 个答案:

答案 0 :(得分:1)

jquery不支持像pdf这样的二进制响应。您应该使用XMLHttpRequest:

var xhr = new XMLHttpRequest()
xhr.open('POST', 'http://localhost:5488/api/report', true)
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8')
xhr.responseType = 'arraybuffer'
xhr.onload = function(e) {
    if (this.status == 200) {
        window.open("data:application/pdf;base64," + window.btoa(String.fromCharCode.apply(null, new Uint8Array(xhr.response))));
    }
}
xhr.send(JSON.stringify({
    template: {
        shortid: 'Syeopu_xe'
    },
    data: {
        'D': '5'
    }
}))

使用把手模板引擎到达数据的示例

<span>{{D}}</span>

此外...
你也可以看看jsreport official browser client library。它将XmlHttpRequest调用包装成更优雅的调用:

jsreport.serverUrl = 'http://localhost:3000';

var request = {
  template: { 
    content: 'foo', engine: 'none', recipe: 'phantom-pdf'
   }
};

//display report in the new tab
jsreport.render('_blank', request);

或以异步方式

jsreport.renderAsync(request).then(function(res) {
  //open in new window
  window.open(res.toDataURI())

  //open download dialog
  res.download('test.pdf')
});