Yii2 当数据通过Yi2中的javascript传递时,通过控制器操作生成pdf

Yii2 当数据通过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

这是问题的继续

我正在尝试通过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 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&nbsp;<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&nbsp;<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&nbsp;<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,