2017-04-18 60 views
0

我有一個按鈕在客戶端下載docx文件。該文件是用PHPWord生成的。在Chrome中它是工作,但不能在Firefox:XMLHttpRequest在Firefox中不起作用

JS:

var req = new XMLHttpRequest(); 
req.open("POST", "/vendor/gendocx.php", true); 
req.responseType = "blob"; 

req.onload = function (event) { 
    var blob = req.response; 
    console.log(blob.size); 
    console.log(blob); 
    var link=document.createElement('a'); 
    link.href=window.URL.createObjectURL(blob); 
    link.download="TEST_this out.docx"; 
    link.click(); 
}; 

req.send(content); 

PHP:

$filename = 'TEST_this out'; 

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpword, 'Word2007'); 

header("Content-Description: File Transfer"); 
header('Content-Disposition: attachment; filename="' . $filename . '"'); 
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); 
header('Content-Transfer-Encoding: binary'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Expires: 0'); 

$objWriter->save($filename); 
$objWriter->save("php://output"); 

exit; 

我已經嘗試過在這個網站的其他解決方案,但都沒有成功。希望你能幫助我解決這個問題。

沒有錯誤信息。這是blob

enter image description here

+2

「不工作」不是一個好問題陳述。控制檯中顯示哪些錯誤消息?當您添加'console.log'語句時,哪些代碼行成功運行? – Quentin

+0

我會發現Chrome和Firefox在這裏以不同的方式處理Ajax提取令人驚訝(但並非不可能)。我不會驚訝地發現,他們不同地處理'.download'和/或自動'.click()'。失敗發生在哪裏? 'onload'是否運行?所有代碼均已成功運行,並且在Chrome中運行的代碼爲 – apsillers

+0

。它出現在瀏覽器底部的常用按鈕來打開文件。但在Firefox中,它不幸沒有任何東西。控制檯沒有錯誤,狀態碼是200。 – moody

回答

0

我得到了它的結果。

顯然Firefox上我必須添加document.body.appendChild(a)到DOM。

req.onload = function (event) { 
    var blob = req.response; 
    console.log(blob.size); 
    console.log(blob); 
    var link=document.createElement('a'); 
    document.body.appendChild(link); 
    link.href=window.URL.createObjectURL(blob); 
    console.log(link.href); 
    link.download="TEST_this_out.docx"; 
    link.click(); 
    setTimeout(function(){ 
     document.body.removeChild(link); 
    }, 500) 
}; 

非常感謝您的幫助!

相關問題