2016-05-19 32 views
0

我有一個頁面,我想要一個表格完成,一個javascript文件驗證信息,將信息發送到一個php文件郵寄給我,然後啓動下載。 問題是,我可以讓JavaScript文件發送郵件或允許下載文件,但不能同時下載。Javascript運行php文件,然後下載文件

有問題的代碼如下所示:

else { 
document.dlform7.action = "http://www.myurl.com/c/post7.php" ; 
document.dlform7.submit(); 
window.location.assign(url); 
} 

有沒有一種方法(可能使用負載),我可以有這兩種行爲發生在一次?

編輯:

AJAX選項:

else { 
$.ajax({ 
    url: "http://www.myurl.com/c/post7.php"; 
    type: "POST", 
    data: data,  
    cache: false, 
    success: function() {    
     window.location.assign(url); 
     document.dlform7.submit();     

     }, 
+3

將表單提交給一個首先[發送電子郵件](http://stackoverflow.com/questions/5335273/how-to-send-an-email-using-php)的php腳本,然後[下載文件](http://stackoverflow.com/questions/7263923/how-to-force-file-download-with-php) – adeneo

回答

2

我認爲你需要調整提交處理您的形式。 IRC,提交事件將導致頁面重新加載。

您將需要爲表單創建一個提交事件處理程序,以便對您的php腳本進行ajax調用。然後讓它返回false以防止頁面重新加載。然後,您應該能夠同時導致文件下載。

UPDATE

如果你要下載的文件不管用PHP腳本會發生什麼派,你可以做以下的電子郵件:

else { 
$.ajax({ 
    url: "http://www.myurl.com/c/post7.php"; 
    type: "POST", 
    data: $(document.dlform7).serialize(),  
    cache: false, 
    }); 
    window.location.assign(url); 

Ajax的方法是表單提交。它不會中斷代碼的流向,因此重定向會在請求之後發生。 (我很確定這會起作用)。

如果你想等到PHP腳本運行成功,那麼你將代碼移動到成功回調,像這樣:

else { 
$.ajax({ 
    url: "http://www.myurl.com/c/post7.php", 
    type: "POST", 
    data: $(document.dlform7).serialize(),  
    cache: false, 
    success: function() { window.location.assign(url); } 
    }); 

當然,你也可以只改變PHP頁面發送電子郵件然後在評論中提及您要下載的文件。

+0

我提交使用onClick =「return checkValuesControl(true);」 – Patrick

+0

在您發佈的代碼片段中,'document.dlform7.submit();'這一行會導致頁面重新加載,導致代碼無法進入下一行。改變這一行,以便它調用一個異步提交(做一個Ajax調用)。你應該能夠做你想要的一切。 – Schleis

+0

所以我會把文件的下載放在ajax調用的成功函數中? – Patrick