2013-08-16 30 views
0

我正在向客户端显示报告。我做了一个ajax调用,通过“传递”变量,即“显示”或“下载”。PHP:无法将CSV文件传输到客户端以响应AJAX调用

这里是Ajax调用:

$.ajax({ 
     type: 'POST', 
     url: 'ajaxController.php', 
     dataType: 'json', 
     data: { 
      e: "getReport", 
      reportName: reportName, 
      delivery: delivery 
     }, 
     success: function (data) { 
      if (delivery === 'display') { 
       $("#reportDisplayTableHeader").html(''); 
       $("#reportDisplayTableBody").html(''); 
       Lifestyle.selectedReportRows = data; 

       $.each(Lifestyle.selectedReportRows, function(key, row) { 
        rowHTML = '<tr>'; 

        $.each(row, function(parameter, value) { 
         if (isHeader) { 
          rowHTML += '<td>' + parameter + '</td>'; 
         } else { 
          rowHTML += '<td>' + value + '</td>'; 
         } 
        }); 

        rowHTML += '</tr>'; 

        if (isHeader) { 
         $reportHead.append(rowHTML); 
         isHeader = false; 
        } else { 
         $reportTableBody.append(rowHTML); 
        } 
       }); 

       $("#reportCaption").show(); 
      } 
     } 
    }); 

这里是服务器端的PHP:

if ($delivery == 'display') { 
     echo json_encode($return); 
    } else if ($delivery == 'download') { 
     header("Content-type: text/csv"); 
     header("Content-Disposition: attachment; filename=file.csv");   
     header('Content-Description: File Transfer'); 
     header("Pragma: no-cache"); 
     header("Expires: 0"); 
     echo "record1,record2,record3\n"; 
    } 

在“显示”的情况下,它会返回JSON只是罚款和客户端显示器一张桌子。

在“下载”的情况下,我希望它弹出一个下载对话框,它可以保存我回复给他们的CSV。

但是,发生的事情是通话正在完成,头文件/ csv正在穿线(谢谢Fiddler),但没有下载对话框出现,客户端也不知道我将csv推送给他们。

为了让下载对话框弹出,我需要做些什么?

谢谢。

+1

看看http://stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax –

+0

保存为一个文件,并返回该文件的网址到最终用户和重定向浏览器一旦返回 – cmorrissey

+0

保存文件的问题是后来我必须做清理。更直接地推送文件内容。 – Lurk21

回答

1

Ajax调用不能下载某个东西,或者至少它确实很难。 更好的是打开一个新的窗口到php文件的位置(然后你应该使用GET),然后用户将被要求下载它。

+0

好吧,我结束了不使用ajax,但window.open。像魅力一样工作!谢谢。 – Lurk21

相关问题