Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为新窗口javascript加载内容时捕获错误响应_Javascript_Ajax_Pdf_Data Uri - Fatal编程技术网

为新窗口javascript加载内容时捕获错误响应

为新窗口javascript加载内容时捕获错误响应,javascript,ajax,pdf,data-uri,Javascript,Ajax,Pdf,Data Uri,我有一个输入元素,它触发一个带有呈现pdf的弹出窗口。但是,在某些情况下,生成此pdf将失败。我希望在原始窗口中捕获结果错误,并仅在请求成功时呈现弹出窗口。如果我提出两个请求,那么这样做很简单: $.ajax({ method: 'GET', url: url, success: function() { window.open(url); }, error: function() { ... } }); 但是,我

我有一个输入元素,它触发一个带有呈现pdf的弹出窗口。但是,在某些情况下,生成此pdf将失败。我希望在原始窗口中捕获结果错误,并仅在请求成功时呈现弹出窗口。如果我提出两个请求,那么这样做很简单:

$.ajax({
    method: 'GET',
    url: url,
    success: function() {
        window.open(url);
    },
    error: function() {
        ...
    }
});
但是,我想避免第二个请求,因为这一代pdf非常昂贵。我目前尝试了以下方法:

创建空窗口,将pdf写入DOM,pushState

success: function(r) {
    var w = window.open('application/pdf');
    w.docuent.write(r);
    w.history.pushState('init', 'A PDF!', url);
}
success: function(r) {
    var w = window.open('data:application/pdf,' + escape(r));
    w.history.pushState('init', 'A PDF!', domain + url);
}
这会失败,因为r包含PDF bytestring

用bytestring打开一个窗口,然后按state

success: function(r) {
    var w = window.open('application/pdf');
    w.docuent.write(r);
    w.history.pushState('init', 'A PDF!', url);
}
success: function(r) {
    var w = window.open('data:application/pdf,' + escape(r));
    w.history.pushState('init', 'A PDF!', domain + url);
}
由于pushState覆盖初始流数据,因此此操作失败

如何使用呈现的PDF创建一个新窗口,而不使用任何外部库(使用响应数据的jquery除外),然后正确设置其url