无法 POST 大型 html 内容到 Chrome 上的服务器
Unable to POST large html content to server on Chrome
我正在尝试通过 POST 请求发送 HTML 内容,但使用 Chrome 无法在服务器端传送内容。使用 Mozilla 时,我在 jsp 中获取请求数据。
当 HTML 内容较小时,这在两种浏览器中都有效。我正在使用 Apache FOP 生成包含此 HTML 内容的 PDF。
var iframe = document.createElement('iframe');
iframe.setAttribute('name','eyeframe');
document.body.appendChild(iframe);
var myform = document.createElement('form');
document.body.appendChild(myform);
myform.setAttribute('action','myJspToRenderHtmlAsPdf.jsp');
myform.setAttribute('method','post');
myform.setAttribute('target','eyeframe');
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "htmlContent");
hiddenField.setAttribute("value", strHTML);
myform.appendChild(hiddenField);
myform.submit();
我将 HTML 分成几块并发布它们并在 jsp 中重新加入它们。这种方法也因 chrome 而失败,即。
chrome(或者可能是整个 webkit)中的输入有字符限制 - 524288,您可以通过在控制台中输入来测试它:
var el = document.createElement("input");
el.maxLength
为什么不使用简单的 FormData?
var formData = new FormData();
formData.append("htmlContent", strHTML);
var request = new XMLHttpRequest();
request.open("POST", "myJspToRenderHtmlAsPdf.jsp");
request.send(formData);
有时间写简单的演示。服务器响应生成 PDF:
<a href="#" id="test">Download</a>
<script>
var formData = new FormData();
formData.append("htmlContent", 'test');
var request = new XMLHttpRequest();
request.responseType = 'blob';
request.open("POST", "myJspToRenderHtmlAsPdf.jsp");
request.onload = function(event) {
if (request.status == 200) {
var blob = new Blob([request.response], {type: 'application/pdf'});
var url = URL.createObjectURL(blob);
var link = document.querySelector('#test');
link.setAttribute('href', url);
} else {
// Handle error
}
};
request.send(formData, true);
</script>
我正在尝试通过 POST 请求发送 HTML 内容,但使用 Chrome 无法在服务器端传送内容。使用 Mozilla 时,我在 jsp 中获取请求数据。 当 HTML 内容较小时,这在两种浏览器中都有效。我正在使用 Apache FOP 生成包含此 HTML 内容的 PDF。
var iframe = document.createElement('iframe');
iframe.setAttribute('name','eyeframe');
document.body.appendChild(iframe);
var myform = document.createElement('form');
document.body.appendChild(myform);
myform.setAttribute('action','myJspToRenderHtmlAsPdf.jsp');
myform.setAttribute('method','post');
myform.setAttribute('target','eyeframe');
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", "htmlContent");
hiddenField.setAttribute("value", strHTML);
myform.appendChild(hiddenField);
myform.submit();
我将 HTML 分成几块并发布它们并在 jsp 中重新加入它们。这种方法也因 chrome 而失败,即。
chrome(或者可能是整个 webkit)中的输入有字符限制 - 524288,您可以通过在控制台中输入来测试它:
var el = document.createElement("input");
el.maxLength
为什么不使用简单的 FormData?
var formData = new FormData();
formData.append("htmlContent", strHTML);
var request = new XMLHttpRequest();
request.open("POST", "myJspToRenderHtmlAsPdf.jsp");
request.send(formData);
有时间写简单的演示。服务器响应生成 PDF:
<a href="#" id="test">Download</a>
<script>
var formData = new FormData();
formData.append("htmlContent", 'test');
var request = new XMLHttpRequest();
request.responseType = 'blob';
request.open("POST", "myJspToRenderHtmlAsPdf.jsp");
request.onload = function(event) {
if (request.status == 200) {
var blob = new Blob([request.response], {type: 'application/pdf'});
var url = URL.createObjectURL(blob);
var link = document.querySelector('#test');
link.setAttribute('href', url);
} else {
// Handle error
}
};
request.send(formData, true);
</script>