Yii2 当数据通过Yi2中的javascript传递时,通过控制器操作生成pdf
这是问题的继续 我正在尝试通过controllerAction StockBetweenDates生成报告。此产品名称的参数startdate和enddate通过单击按钮的javascript函数来自index2。在控制台中,我得到以下错误 index2.phpYii2 当数据通过Yi2中的javascript传递时,通过控制器操作生成pdf,yii2,Yii2,这是问题的继续 我正在尝试通过controllerAction StockBetweenDates生成报告。此产品名称的参数startdate和enddate通过单击按钮的javascript函数来自index2。在控制台中,我得到以下错误 index2.php <?php use yii\helpers\Html; //use yii\grid\GridView; use kartik\grid\GridView; use kartik\export\ExportMenu; use f
<?php
use yii\helpers\Html;
//use yii\grid\GridView;
use kartik\grid\GridView;
use kartik\export\ExportMenu;
use frontend\modules\stock\models\Sellitem;
use dosamigos\datepicker\DatePicker;
use dosamigos\datepicker\DateRangePicker;
use kartik\form\ActiveForm;
use yii\helpers\Json;
use yii\db\Query;
use yii\db\Command;
use kartik\mpdf\Pdf;
/* @var $this yii\web\View */
/* @var $searchModel frontend\modules\stock\models\SellitemSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = 'Stock';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="sellitem-index">
<h1><?= Html::encode($this->title) ?></h1>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<div class="row">
<div class="form-group">
<div class="col-xs-4 col-sm-4 col-lg-4">
<label for="upc" class="control-label"><p class="text-info">Product Code <i class="icon-star"></i></p></label>
<input type="text" class="form-control" id="upc" class="span3">
</div>
<div class="col-xs-4 col-sm-4 col-lg-4">
<label for="upc" class="control-label"><p class="text-info">Start Date <i class="icon-star"></i></p></label>
<?= DatePicker::widget([
//'label' => 'Startdate',
'name' => 'startdate',
'id' => 'startdate',
//'value' => '02-16-2012',
'template' => '{addon}{input}',
'clientOptions' => [
'autoclose' => true,
'todayHighlight' => true,
'format' => 'yyyy-mm-dd'
]
]);?>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4">
<label for="upc" class="control-label"><p class="text-info">End Date <i class="icon-star"></i></p></label>
<?= DatePicker::widget([
//'label' => 'Startdate',
'name' => 'enddate',
'id' => 'enddate',
//'value' => '02-16-2012',
'template' => '{addon}{input}',
'clientOptions' => [
'autoclose' => true,
'todayHighlight' => true,
'format' => 'yyyy-mm-dd'
]
]);?>
</div>
</div>
</div>
<p>
<div class="form-group pull-right">
<button id="yourButton" class="btn btn-primary" >Seach</button>
</div>
</p>
</div>
<?php
/* start getting the itemid */
$this->registerJs(
"$('#yourButton').on('click', function() {
var productname = $('#upc').val();
var startdate = $('#startdate').val();
var enddate = $('#enddate').val();
//alert(uPc);
$.get('index.php?r=stock/sellitem/stockbetweendates',{ productname : productname, startdate : startdate, enddate : enddate}, function(data){
var data = $.parseJSON(data);
});
});"
);
/* end getting the itemid */
?>
更新的javascript
<?php
/* start getting the itemid */
$this->registerJs(
"$('#yourButton').on('click', function() {
var productname = $('#upc').val();
var startdate = $('#startdate').val();
var enddate = $('#enddate').val();
//alert(uPc);
$.get('index.php?r=stock/sellitem/stockbetweendates',{ productname : productname, startdate : startdate, enddate : enddate});
});"
);
/* end getting the itemid */
?>
<?php
/* start getting the itemid */
$this->registerJs(
"$('#yourButton').on('click', function() {
var productname = $('#upc').val();
var startdate = $('#startdate').val();
var enddate = $('#enddate').val();
var desc = $('#desc').val();
//alert(productname);
//$.get('index.php?r=stock/sellitem/printproductledger2',{ productname : productname, startdate : startdate, enddate : enddate,prodesc:desc});
$.ajax({
type: 'GET',
url: 'index.php?r=stock/sellitem/printproductledger2',
data: { productname:productname, startdate : startdate, enddate : enddate,prodesc:desc},
contentType: 'application/json; charset=utf-8',
//dataType: 'json',
success: function() { alert('Success'); }
});
});"
);
/* end getting the itemid */
?>
您的代码无法工作有几个原因 所以这不是一个恰当的答案,而是一些主要的建议 1您正在使用此调用获取数据
$.get('index.php?r=stock/sellitem/stockbetweendates',
{ productname : productname, startdate : startdate, enddate : enddate},
function(data){
var data = $.parseJSON(data);
});
获取的数据没有正确的JSON格式
如果您需要正确的数据JSON格式,您应该在操作中正确地编码_JSON,并使用回音将此数据发送给调用方
2在你的行动中,股票在中间
您有两次返回语句
]);
return $pdf->render();
//return $this->render('_printSalarystatement', ['s_period' => $s_period]);
return $this->render('index2', [
'upc' => $upc,
'startdate' => $startdate,
'enddate' => $enddate,
]);
很明显,只有第一部分起作用。。并且可以呈现为pdf格式
但是通过这种方式,yuo不会向ajax调用程序$发送任何信息
我的建议是将代码拆分为单独的函数。。其中每一项都与一项需求具体相关
对于pdf,请尝试使用
'mode' => Pdf::MODE_BLANK,
不是“mode”=>Pdf::mode_UTF8,Hi scaiseEdge,我明白了你的观点2。。。但我对json知之甚少。你能看看吗。。如果我可以在不使用Javascript和json的情况下传递数据,我可以自己打印pdf。。不是强制性的。您可以使用带参数的简单yii2 url传递数据。。像往常一样。。或者,如果在ajax中不需要结果,可以避免使用管理数据的功能。。我也想要牙。请看一下我在前面的评论中给出的链接。@Tanmay。我已经看过链接了。。但对我来说,这个链接并不能满足你的需要。。渲染不适用于返回ajax值。。你应该使用echo,我重复一遍,如果你只需要一个简单的行动电话,你可以使用。。一个普通的yii2 Url::到。。。或者ajax$.get。。。。。没有用于管理响应的functiondata..Hi scaisEdge,我删除了functiondata并更新了问题中的当前javascript代码。现在,我认为正在调用控制器操作,因为控制台中没有错误。但我不知道如何返回pdf。我没有得到任何输出。请让我知道如何显示pdf。或者请告诉我如何使用yii2url::to调用控制器操作。谢谢
<?php
/* start getting the itemid */
$this->registerJs(
"$('#yourButton').on('click', function() {
var productname = $('#upc').val();
var startdate = $('#startdate').val();
var enddate = $('#enddate').val();
var desc = $('#desc').val();
//alert(productname);
//$.get('index.php?r=stock/sellitem/printproductledger2',{ productname : productname, startdate : startdate, enddate : enddate,prodesc:desc});
$.ajax({
type: 'GET',
url: 'index.php?r=stock/sellitem/printproductledger2',
data: { productname:productname, startdate : startdate, enddate : enddate,prodesc:desc},
contentType: 'application/json; charset=utf-8',
//dataType: 'json',
success: function() { alert('Success'); }
});
});"
);
/* end getting the itemid */
?>
$.get('index.php?r=stock/sellitem/stockbetweendates',
{ productname : productname, startdate : startdate, enddate : enddate},
function(data){
var data = $.parseJSON(data);
});
]);
return $pdf->render();
//return $this->render('_printSalarystatement', ['s_period' => $s_period]);
return $this->render('index2', [
'upc' => $upc,
'startdate' => $startdate,
'enddate' => $enddate,
]);
'mode' => Pdf::MODE_BLANK,