Php Yii2:尝试使用ajax生成csv文件
我正在尝试生成一个包含一些数据的基本csv文件。当我在ajax调用中使用警报时,它会显示数据(因此有数据传递),但当我单击按钮时,它不会生成CSV文件。我是yii2的新手,所以我还在学习 已更新 我已经更改了文件 //查看export/index.phpPhp Yii2:尝试使用ajax生成csv文件,php,yii2,export-to-csv,Php,Yii2,Export To Csv,我正在尝试生成一个包含一些数据的基本csv文件。当我在ajax调用中使用警报时,它会显示数据(因此有数据传递),但当我单击按钮时,它不会生成CSV文件。我是yii2的新手,所以我还在学习 已更新 我已经更改了文件 //查看export/index.php Pjax::begin(); $form = ActiveForm::begin([ 'action' => yii\helpers\Url::to(['cms-export/index']), 'options' =
Pjax::begin();
$form = ActiveForm::begin([
'action' => yii\helpers\Url::to(['cms-export/index']),
'options' => ['data' => ['pjax' => true]],
'layout' => 'horizontal',
'fieldConfig' => [
'horizontalCssClasses' => [
'label' => 'col-sm-2',
'offset' => 'col-sm-offset-2',
'wrapper' => 'col-sm-5',
'hint' => 'col-sm-5',
],
],
]);
echo $form->field($model, 'language')->dropDownList([//some list]);
echo $form->field($model, 'filename')->textInput()
echo Html::submitButton('Submit', ['class' => 'btn btn-primary'])';
ActiveForm::end();
Pjax::end();
//模型
public function generateCsv(){
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="sample.csv"');
$data = [datacomeshere];
$fp = fopen('php://output', 'w');
foreach ( $data as $line ) {
fputcsv($fp, $line, ';');
}
fclose($fp);
}
//控制器
public function actionIndex()
{
$model = new Export();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// validation works, but method does not work
\common\models\Export::generateCsv();
}
return $this->render('index' , ['model' => $model]);
}
当我单击该按钮时,jquery文件中将显示一个500错误
xhr.send( options.hasContent && options.data || null );
我建议采用以下方法,删除整个JS代码: 使链接成为真实的链接。有一个GET请求是有意义的,因为您只是通过调用获取数据
<div class="modal-button-row">
<a href="cms-export/download" id="export-trigger" class="btn btn-success pull-left">Export</a>
</div>
指南中的更多信息:
您还需要删除,因为它将通过JS使用链接和表单完成自己的工作!或者您必须配置Pjax,例如使用,这超出了本问题的范围。我建议采用以下方法,删除整个JS代码: 使链接成为真实的链接。有一个GET请求是有意义的,因为您只是通过调用获取数据
<div class="modal-button-row">
<a href="cms-export/download" id="export-trigger" class="btn btn-success pull-left">Export</a>
</div>
指南中的更多信息:
您还需要删除,因为它将通过JS使用链接和表单完成自己的工作!或者您必须配置Pjax,例如with,这超出了本问题的范围。一个问题肯定是,常规操作调用总是创建发送到浏览器的标题、cookie和一些内容(甚至是空字符串,例如,如果您忘记了带有
$this->render(…)
)的返回语句)。我猜想你有错误。所以这必须被抑制,这样你的CSV代码才能控制
请尝试以下操作:
public function actionIndex() {
$model = new Export();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
\common\models\Export::generateCsv();
Yii::$app->response->isSent = true;
} else {
return $this->render('index' , ['model' => $model]);
}
}
顺便说一句:如果调用没有更改数据,请在表单中使用method:GET
。这是一个HTTP标准。在添加或更改某些内容时使用POST
但是,我建议使用。这也适用于ActiveForm。正如该答案中所指出的,您必须删除或配置Pjax。一个问题肯定是,常规操作调用总是创建头、cookie和一些内容(甚至是空字符串,例如,如果您忘记了发送到浏览器的带有
$this->render(…)
)的返回语句)。我猜想你有错误。所以这必须被抑制,这样你的CSV代码才能控制
请尝试以下操作:
public function actionIndex() {
$model = new Export();
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
\common\models\Export::generateCsv();
Yii::$app->response->isSent = true;
} else {
return $this->render('index' , ['model' => $model]);
}
}
顺便说一句:如果调用没有更改数据,请在表单中使用method:GET
。这是一个HTTP标准。在添加或更改某些内容时使用POST
但是,我建议使用。这也适用于ActiveForm。正如回答中所指出的,您必须删除或配置Pjax。好的,很好,但遗憾的是,这在这里没有任何作用,所以我可能遗漏了什么吗?@user759235发生了什么事?@user759235是否调用了该操作?您是否获得状态400?@user759235如果没有调用操作,您可能必须使用
href=“/cms export/download”
。或者尝试$csv=“asdf,fdsa”代码>。您是否已删除JS代码?@user759235什么不起作用?你为什么不提供更清楚的信息?请描述发生了什么!不要这样改变你的问题好吧,很好,但很遗憾,这里什么都没有,所以我可能遗漏了什么吗?@user759235发生了什么事?@user759235是否调用了该操作?您是否获得状态400?@user759235如果没有调用操作,您可能必须使用href=“/cms export/download”
。或者尝试$csv=“asdf,fdsa”代码>。您是否已删除JS代码?@user759235什么不起作用?你为什么不提供更清楚的信息?请描述发生了什么!不要把你的问题改成“不会产生”。。。会发生什么呢???我在jquery代码中看到一个500错误,您可以查看一下日志文件。应该记录此错误。如果发生错误500,则大多数情况下每次都会有内容写入服务器的错误日志。请找到该消息并将其附加到问题“不会生成”。。。会发生什么呢???我在jquery代码中看到一个500错误,您可以查看一下日志文件。应该记录此错误。如果发生错误500,则大多数情况下每次都会有内容写入服务器的错误日志。请找到该消息并将其附加到问题仍然不工作,我仍然在jquery文件中看到错误500状态代码,与其他解决方案相同。我发现错误500…名称空间错误,但它没有保存为文件,它只显示为文本仍然不工作,我仍然在jquery文件中看到错误500状态代码,与其他解决方案相同的错误Kay发现了500个错误…错误的名称空间,但它没有保存为文件,它只显示为文本