Ajax发送数据到php下载文件?

时间:2016-01-30 12:01:39

标签: javascript php jquery json ajax

第一件事:

用户提交"运行系统",我发送到 php 功能systemid用户使用 ajax 运行什么,该功能将数据收集到数组中使用json返回数组到jquery。 - 这很棒

第二件事

返回的数据我需要发送到函数将数组转换为 xls / csv ,该函数还返回系统名称。 - 也有效

Finnally

我使用window.location.href = '/index.php?/system/download/'+url;开始下载,但在下载的文件中没有数据。

这是客户端代码:

$(".systemform").submit(function(e) {   
  var sysid = $(".sysid:checked").val();
  $.ajax({
         type: "POST",
         url: '/index.php?/system/system_options/export',
         data: { system : sysid },
         dataType:"json",
         success: function(data)
         {
            $(".exportsys").removeAttr("disabled");
            $(".exportsys").removeAttr("title");                            
            //now user can export data
            $(".exportsys").click(function(e){
                //alert(JSON.stringify(data)); works                                
                $.ajax({
                    type:"POST",
                    url: '/index.php?/system/downloadcsv',
                    data: { exportarr : data }, //send array
                    dataType:"json",
                    success: function(response){
                        var url = response.url; //i get system name
                        window.location.href = '/index.php?/system/download/'+url; //now download start, but file is empty because data is not sended
                    },
                    error: function(xhr, textStatus, error){
                        alert(error);
                          console.log(xhr.statusText);
                          console.log(textStatus);
                          console.log(error);
                    }                                   
                })
            })
         },
          error: function(xhr, textStatus, error){
                console.log(xhr.statusText);
                console.log(textStatus);
                console.log(error);
          }
       });

  e.preventDefault(); // avoid to execute the actual submit of the form.
});

和服务器端(注意:我正在使用 codeignitier ),这是在同一个控制器中:

public function downloadcsv(){
  //var_dump($this->export_arr);
  if(isset($_POST['exportarr'])){
    $exportarr = $_POST['exportarr'];
    $filename = $exportarr[0]['System'] . date('Ymd') . ".xls";
    //echo $filename;
    echo json_encode(array('url'=>$filename));
    $data = $exportarr;
    $flag = false;
    foreach($data as $row) {
      if(!$flag) {
        // display field/column names as first row
        implode("\t", array_keys($row)) . "\r\n";
        $flag = true;
      }
      array_walk($row, 'cleanData');
      implode("\t", array_values($row)) . "\r\n";

    //print_r($data);
    }
  }
  exit;
}
public function download($filename){
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Type: text/plain");
}

0 个答案:

没有答案