2014-04-10 3 views
0

내가 원하는 작업 : 1, Javascript ajax POST 배열을 PHP에 사용; 2, POST 배열을 사용하여 PHP로 mysql의 결과를 검색한다. 3, csv 형식으로 검색 결과를 반환하므로 사용자가 파일을 저장할 수 있습니다. 나는 파트 1과 파트 2를 달성했지만, 나는이 같은 PHP로 배열 데이터를 게시하는 아약스를 사용 csv 파일이 을 반환받을 수 없습니다 exportDataColoniesNumber.php의 데이터를javascript ajax 데이터를 csv로 내보내는 방법은 무엇입니까?

$(document).ready(function(){ 
$('#export').click(function(){ 
    var list = JSON.stringify(count); 
    $.ajax({ 
     type: "POST", 
     url: "exportDataColoniesNumber.php", 
     data: {'data': list}, 
     success: function(response){ 
      alert(response); 
     } 
    }); 
}); 
}); 

을 그리고 처리하고, 페이지는 CSV 파일을 반환하는 것입니다 :

<?php 
$data = json_decode($_POST['data']); 
$last_key = end(array_keys($data)); 
$sql = "SELECT * FROM coloniesNumber WHERE "; 
foreach ($data as $key => $value) { 
    $sql .= "num='" . $value . ($key == $last_key ? "';" : "' OR "); 
} 

$con = DatabaseConnection::get()->connect(); 
mysql_query('set names utf8'); 
mysql_select_db('fish') or die('Could not select database'); 
$result = mysql_query($sql); 

$lines = ''; 
while($row = mysql_fetch_array($result)) { 
    $line = ''; 
    for($i = 0; $i < $fields; $i++) { 
     $line .= $row[$i] . ","; 
    } 
    $lines .= trim($line) . "\n"; 
} 
header("Content-type:application/vnd.ms-excel"); 
header("Content-disposition:csv".date("Y-m-d").".csv"); 
header("Content-disposition:filename=test.csv"); 
print "$lines"; 
?> 

경고 (응답) 반환 CSV 데이터 :

8,4008,11.267,fat,1,, 
9,4009,12.022,thin,1,, 
10,4010,11.356,thin,1,, 
11,4011,10.873,thin,1,, 
12,4012,11.017,thin,1,, 
13,4013,11.301,thin,1,, 

가 어떻게 CSV 파일을 반환받을 수 있나요?

+2

아약스를 도려 내고 대신 숨겨진 iframe에 제출하십시오. – Steve

+1

가장 쉬운 방법은 아약스를 사용하지 않고 매개 변수가있는 URL로 리디렉션하는 것입니다. – Jurik

+0

이것은 이미 답변되었습니다. 보십시오 http://stackoverflow.com/questions/14682556/why-threre-is-no-way-to-download-file-using-ajax-request – wizhippo

답변

0

개인적으로 난 CSV로 내보내는 PHP 처리기, 당신은 이러한 헤더가 있는지 확인을 만들었습니다

header("Content-Disposition: attachment; filename=report.csv"); 
header("Content-Type: text/csv"); 

그럼 그냥 데이터를, 에코 CSV 형식 또는 수행하는 많은 무료 CSV 클래스 중 하나를 사용 당신을 위해 그 다음 (당신이 하나를 가지고 asuming) 양식을

(단지 매개 변수로 배열과 함수를 호출)의 1x1 픽셀의 숨겨진 iframe을 게시와 CSS로 오프 스크린 설정

iframe { position: absolute; left: -9999px; } 

모두 설정해야하며 내보내기가 나타납니다. 그러나 파일이 크지 않거나 스크립트가 완료하는 데 많은 시간이 걸리면 그때까지 다운로드가 표시되지 않습니다.

관련 문제