2013-07-06 30 views
2

所以我有一個頁面,用戶將點擊「導出」按鈕,我想運行一個JavaScript函數並獲取我需要的導出數據,然後調用一個php腳本來獲取來自我的數據庫的數據並強制下載。現在問題是,我可以運行JavaScript,然後我給腳本調用一個帖子,但沒有下載。我假設這是因爲我實際上沒有將窗口移動到PHP文件,我只是簡單地調用腳本。誰能幫我嗎?運行javascript函數然後發佈下載

javascript:ids是我需要傳遞以獲取信息的數組。這是在用戶點擊「導出」按鈕時調用的功能。

$.ajax({   
    type: "POST", 
    url: "exportLeads.php", 
    data: { 'idArray' : ids } 
}); 

php:我用這個Export to CSV via PHP quetsion。該功能正確實施,我沒有得到任何錯誤。沒有提示下載的文件。

$data = mysql_query($query) or die($query.mysql_error()); 
$results = array(); 
while($line = mysql_fetch_array($data, MYSQL_ASSOC)){ 
    $results[] = $line; 
} 
download_send_headers("data_export_" . date("Y-m-d") . ".csv"); 
echo array2csv($results); 
die(); 
+0

你不使用AJAX來下載文件。 – Musa

+0

@Musa對,我的問題是,我怎樣才能在新窗口中打開我的腳本,或者如何提示用戶提供文件下載。我需要使用ajax將數據發送到腳本。 – LiverpoolFTW

+0

如何將'window.location.href'設置爲以數據作爲查詢字符串的url。 – Musa

回答

1

您無法使用ajax下載文件。您可以使用window.location.href重定向用戶到文件位置,但不管,我建議你閱讀這一點,有人給你一個更好的答案:)

Download a file by jQuery.Ajax

,或者您也可以使用這樣的 在您的JavaScript

$.post("exportLeads.php", { 'idArray' : ids }, function(response) { 
    if (response.error === 0) { 
    window.location.href = response.location; 
    } 
}, "json"); 

,並在你的PHP文件

<?php 
    if ($has_error) { 
    echo json_encode(array("error" => 1)); 
    } 
    else { 
    echo json_encode(array(
     "error"  => 0, 
     "location" => "link_to_file" 
    )); 
    } 
?> 
+0

這工作完美。謝謝! – LiverpoolFTW

+0

很高興知道:) – bystwn22

0

你可以去window.location.href在你的成功的功能:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "exportLeads.php", 
    data: { 'idArray' : ids }, 
    success: function(data) { 
      if (data.success) window.location.href = "/link-to-your-download-script"; 
    } 
}); 

你將不得不改變json_encode響應和拆分功能分爲兩個劇本,一個是出口, (唯一的ID或某物)一個用於下載腳本

+0

出於某種原因,這從來沒有進入if語句。我需要在我的PHP腳本中返回一些東西嗎? – LiverpoolFTW

+0

是的,回聲json_encode(數組(「成功」=> 1)); – Jan

1

沒時間寫代碼,但在幾句話,你需要:

  • 執行JS通過ajax調用服務器端。
  • 生成文件,將其放到服務器驅動器中,並使用一些隨機名稱。記住會話的名稱。向客戶發送一些迴應。
  • 當客戶端得到響應時,用JS將用戶重定向到PHP代碼檢查會話中是否存在某個文件名的某個頁面,如果有,則讀取該文件,並將其從會話中刪除。
+0

看到我的答案如下:-) – Jan

相關問題