首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel中将输入数据从一个视图传递到另一个视图

在Laravel中将输入数据从一个视图传递到另一个视图
EN

Stack Overflow用户
提问于 2020-11-18 06:29:31
回答 2查看 475关注 0票数 1

我有两个视图,第一个视图是用来收集用户输入(用户选择站点和日期),第二个视图是pdf视图(将显示在浏览器中)。现在的问题是,当用户从第一个视图中选择输入(站点和日期)并单击一个名为“转换按钮”的按钮时,控制器和第二个视图(PDF)无法获取数据。

多次尝试仍然无法将筛选器数据显示在pdf视图上。

代码语言:javascript
复制
<select name="sites" id="sites" required="required" style="border:1px solid black; margin-left:10px; width:200px; padding:3px; font-size:16px; text-align-last:center;" >
                                <option value="" selected="" disabled >  </option>
                                <option value="BBSR">ABC</option>
                                <option value="BPSR">BBC</option>
                                <option value="BKSR">BBE</option>
                                <option value="FCSR">QWE</option>  
</select>

<div class="row">
<div class="col-md-6">
<div class="form-group">

   <label style="margin-left:20px; font-size:16px;">Start Date : </label>
     <input type = "text"  name="startdate" id = "datepicker-8" style="border:1px solid black; width:270px;margin-left:47px; text-align:center; font-size:16px;" placeholder="Select Start Date" autocomplete="off" required="required" />
                                
</div>
</div>
                        
<div class='col-md-6'>
<div class="form-group">

   <label style="margin-left:20px;font-size:16px;">End Date : </label>
     <input type = "text"  name="enddate"   id = "datepicker-9" style="width:270px; margin-left:53px; text-align:center; font-size:16px;" placeholder=" End Date" disabled />
  </div>
</div>
</div>

按钮:

代码语言:javascript
复制
<div class="button" style="bottom:-25px">
    <button class="btn btn-success" id="convertBtn" name="convertBtn" type="button" style="width:150px;  margin-left:60px; font-size:16px;" onclick="location.href = '/home/weeklybilling/pdf';" > Convert to PDF</button> 
 </div>
 </div>

ajax:

代码语言:javascript
复制
  $('#convertBtn').click(function() {     
                var e = document.getElementById("sites");
                var site = e.options[e.selectedIndex].text;
                var startdate = $('#datepicker-8').val();
                var enddate = $('#datepicker-9').val();
                var _token =$('input[name="_token"]').val();
            if(site != '' && startdate  != '' &&  enddate != '' )
            {  
                $.ajax({ 
                    paging: false,
                    searching: false,
                    processing: true,
                    retrieve: true,
                    serverSide: true,
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    },
                    url:"{{ route('weeklybilling.weeklypdf') }}",
                    type:"GET",
                    dataType:"json",
                    data:{
                        site:site, 
                        startdate:startdate,
                        enddate:enddate,
                        _token:_token,
                        },
                    
                    success:function(data){
                       
                    
                    },
                    error: function(data){
                        alert('Error');
                    }
                }) 
            } else
            {
                alert("Please select 'Site' & 'Date'. ");
            }
        });

路由

代码语言:javascript
复制
Route::get('/home/weeklybilling','WeeklyBillingController@Index');
Route::get('/home/weeklybilling/pdf','WeeklyBillingController@weeklybill')->name('weeklybilling.weeklybill'); 

控制器

代码语言:javascript
复制
public function weeklypdf(Request $request)
    {        
      $bills = DB::table('weekly_data')
               ->where('site', $request->site)
               ->whereBetween('report_date',[$request->startdate ,$request->enddate])
              ->get();

         //dd($bills); get null
          $pdf = \App::make('dompdf.wrapper');
          $pdf =PDF::loadView('weeklypdf',compact('bills'));

       $pdf ->setPaper('a4','landscape');
       return $pdf->stream('weeklyreport.pdf');
        
    }

谁知道如何从第一视图获取输入数据并将其传递给第二视图( pdf )?在pdf视图中没有数据表**

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-28 08:04:02

如果你和我一样面临同样的问题。这是你可以尝试的东西。

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url: url,
    data: params,
    xhrFields: {
        responseType: 'blob' // to avoid binary data being mangled on charset conversion
    },
    success: function(blob, status, xhr) {
        // check for a filename
        var filename = "";
        var disposition = xhr.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
            var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = filenameRegex.exec(disposition);
            if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
        }

        if (typeof window.navigator.msSaveBlob !== 'undefined') {
            // IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
            window.navigator.msSaveBlob(blob, filename);
        } else {
            var URL = window.URL || window.webkitURL;
            var downloadUrl = URL.createObjectURL(blob);

            if (filename) {
                // use HTML5 a[download] attribute to specify filename
                var a = document.createElement("a");
                // safari doesn't support this yet
                if (typeof a.download === 'undefined') {
                    window.location.href = downloadUrl;
                } else {
                    a.href = downloadUrl;
                    a.download = filename;
                    document.body.appendChild(a);
                    a.click();
                }
            } else {
                window.location.href = downloadUrl;
            }

            setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
        }
    }
});

它帮助我传递数据到pdf视图,但我现在的问题是,它不能被下载。

票数 0
EN

Stack Overflow用户

发布于 2020-11-18 08:22:08

这是因为您的方法是GET,并且您正在发送像POST方法这样的参数,更改到POST的路由或以如下方式更改发送参数:

代码语言:javascript
复制
             $.ajax({ 
                paging: false,
                searching: false,
                processing: true,
                retrieve: true,
                serverSide: true,
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url:"{{ route('weeklybilling.weeklypdf') }}" + "?site="+site+"&startdate="+startdate+"&enddate="+enddate+"&_token="+_token,
                type:"GET",
                success:function(data){
                   
                
                },
                error: function(data){
                    alert('Error');
                }
            }) 

希望它能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64888143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档