将CSV字符串从Javascript传递到PHP

问题描述:

我试图将我的DHTMLX网格导出为CSV文件。我有它设置的框架,但我正在运行一个问题,如果我尝试导出超过25行,它会失败。没有错误信息或任何东西。下面是我的代码:将CSV字符串从Javascript传递到PHP

的Javascript

myGrid.csvParser = myGrid.csvExtParser; 
myGrid.setCSVDelimiter('|'); 
myGrid.csv.row = "endOfRow"; 

var gridCsvData = myGrid.serializeToCSV(); 

$.post("data/export.php?csvdata="+gridCsvData); 

PHP

$csvData = $_REQUEST['csvdata']; 

$csv = explode('endOfRow',$csvData); 

$myfile = "grid.csv"; 

$fh = fopen($myfile, 'w') or die("can't open file"); 

foreach($csv as $line) { 
    fputcsv($fh, explode('|',$line),',','"'); 
} 

fclose($fh); 


//Redirect output to a client's web browser (csv) 
header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=grid.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

readfile('grid.csv'); 

任何帮助表示赞赏。我认为这是POST上的某种大小限制问题,我试图在.htaccess文件中将限制修改为20MB。正如我所说,这只适用于几行(< 25),但是一旦我尝试导出不止一次,它永远不会生成.csv文件。

我想$.post(来自jQuery的权利?)不处理这样一个巨大的网址。你应该添加一个参数,可以作为HTTP POST查询的参数:

$.post(
    "data/export.php", 
    { 
    csvdata: gridCsvData 
    } 
); 
$.post(
    "data/export.php", 
    { 
    csvdata: gridCsvData 
    } 
); 
+0

作品非常感谢man..still无法让它提示用户保存该文件。任何想法,为什么不会弹出?它只是在不提示的情况下保存在服务器上。 – ad2387

+0

你是否用'application/csv'代替'Content-type'中的'text/csv'? – j0k

+0

是的,我在这两者之间来回走动。没有什么区别,我可以看到 – ad2387