【发布时间】:2020-01-25 17:27:45
【问题描述】:
我有一个简单的结构,可以从 jsPDF 生成 PDF,获取“datauristring”并将其传递给 AJAX 请求。但是,AJAX 方法不会触发。当它尝试“发送”时,它会抛出异常“h 未定义”。我从跟踪 XHR 请求中发现了这一点,它出现在 jQuery 库中。 jsPDF回调后这么快就不能触发AJAX请求了吗?
我应该注意我正在将 PDF 发送到一个服务,该服务将该 pdf 与另一个 pdf 合并并返回一个全新的文档。
var docX = new jsPDF("p", "pt", "letter");
margins = {
top: 20,
bottom: 20,
left: 20,
width: 522
};
specialElementHandlers = {
// element with id of "bypass" - jQuery style selector
'#bypassme': function (element, renderer) {
// true = "handled elsewhere, bypass text extraction"
return true
}
};
docX.fromHTML (
document.getElementById('productModalContent'),
margins.left,
margins.top, {
'width' : margins.width,
'elementHandlers': specialElementHandlers
},
function (dispose) {
specDoc = (docX.output('datauristring'));
console.log(dispose);
//docX.save('asdfas.pdf');
//console.log(specDoc);
processPDF(specDoc);
}, margins
);
function processPDF(doc) {
console.log(doc.length);
$.ajax({
type: "POST",
url: "https://someurl",
data: {
'partNumber' : '$!{rawPartNumber}',
'region' : '$!{regionContentlet.code}',
'doc' : doc
},
cache: false,
success: function(data) {
console.log("success?");
var link=document.createElement('a');
link.href='data:application/pdf;base64,' + data;
link.download="myfile.pdf";
link.setAttribute('target', '_blank');
link.click();
},
error: function(data) {
console.log(data);
}
});
}
编辑:删除 ajax 并添加 fetch。
const response = await fetch('myurl', {
method: 'POST',
body: {
'partNumber' : '$!{rawPartNumber}',
'region' : '$!{regionContentlet.code}',
'myDiv' : doc
}
});
【问题讨论】:
-
乍一看,我能在 jsPDF 库中找到变量
h的唯一地方是 rect 和 rectRounded 函数。这是有道理的,这是由渲染函数内部某处的 fromHTML() 调用的。但是,当我查看 fromHTML() github.com/willowsystems/jsPDF/blob/master/… 的来源时,它只接受 4 个参数,而不是 6 个。那么您使用的是哪个版本的 jsPDF?因为如果您期望 6 个参数,我可能正在查看错误的库或您的函数 processPDF 根本没有使用。 -
-
您收到
console.log("success?");或console.log(data);还是在此之前收到错误?您是否尝试过使用 fetch() 请求而不是 jquery 来避免该问题? -
这些都没有出现,这很奇怪。就像 jQuery 没有冒泡一样。我还没试过 fetch
-
我无法重现该问题。我将您的代码复制到一个空的 html 页面的
标签: javascript ajax jspdf