【问题标题】:Can't get $id variable from view in controller and DB using Ajax无法使用 Ajax 从控制器和数据库中的视图中获取 $id 变量
【发布时间】:2020-12-09 18:42:57
【问题描述】:

在视图中我可以看到变量 $id,但是当我使用 Ajax 发送它时,我在 DB 中得到了 NULL。

我正在使用 Ajax 从视图中发送变量 $id,如下所示:

$.ajax({
            url:'{{ route("dynamic-field2.insert") }}',
            method:'post',
            data:$(this).serialize(), proform: <?php echo $id ?>,
            dataType:'json',
            beforeSend:function(){
                $('#save').attr('disabled','disabled');
            },

我正在尝试使用它在控制器中获取它:

if($request->ajax())
     {
    ...
$number = $request->id;

这是完整的脚本代码:

<script>
$(document).ready(function(){

 var count = 1;

 dynamic_field(count);

 function dynamic_field(number)
 {
  html = '<tr>';
        html += '<td><input type="text" name="name[]" class="form-control" /></td>';
        html += '<td><input type="text" name="PKWIU[]" class="form-control" /></td>';
        html += '<td><input type="text" name="quantity[]" class="form-control" /></td>';
        html += '<td><input type="text" name="unit[]" class="form-control" /></td>';
        html += '<td><input type="text" name="netunit[]" class="form-control" /></td>';
        html += '<td><input type="text" name="nettotal[]" class="form-control" /></td>';
        html += '<td><input type="text" name="VATrate[]" class="form-control" /></td>';
        html += '<td><input type="text" name="grossunit[]" class="form-control" /></td>';        
        html += '<td><input type="text" name="grosstotal[]" class="form-control" /></td>';
        if(number > 1)
        {
            html += '<td><button type="button" name="remove" id="" class="btn btn-danger remove">Remove</button></td></tr>';
            $('tbody').append(html);
        }
        else
        {   
            html += '<td><button type="button" name="add" id="add" class="btn btn-success">Add</button></td></tr>';
            $('tbody').html(html);
        }
 }

 $(document).on('click', '#add', function(){
  count++;
  dynamic_field(count);
 });

 $(document).on('click', '.remove', function(){
  count--;
  $(this).closest("tr").remove();
 });

 $('#dynamic_form').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url:'{{ route("dynamic-field2.insert") }}',
            method:'post',
            data:$(this).serialize(), proform: <?php echo $id ?>,
            dataType:'json',
            beforeSend:function(){
                $('#save').attr('disabled','disabled');
            },
            success:function(data)
            {
                if(data.error)
                {
                    var error_html = '';
                    for(var count = 0; count < data.error.length; count++)
                    {
                        error_html += '<p>'+data.error[count]+'</p>';
                    }
                    $('#result').html('<div class="alert alert-danger">'+error_html+'</div>');
                }
                else
                {
                    dynamic_field(1);
                    $('#result').html('<div class="alert alert-success">'+data.success+'</div>');
                }
                $('#save').attr('disabled', false);
            }
        })
 });

});
</script>

这是控制器的完整代码:

<?php

namespace App\Http\Controllers;
use DB;
use Illuminate\Http\Request;
use App\DynamicField;
use Validator;
use App\Proform; 


class DynamicField2Controller extends Controller
{
    function index()
    {
     return view('proforms.add');
    }

    function insert(Request $request)
    {

        

     if($request->ajax())
     {
         
      $rules = array(
       'name.*'  => 'required',
       'PKWIU.*'  => 'required',
       'quantity.*'  => 'required',
       'unit.*'  => 'required',
       'netunit.*'  => 'required',
       'nettotal.*'  => 'required',
       'VATrate.*'  => 'required',
       'grossunit.*'  => 'required',
       'grosstotal.*'  => 'required',
       'proform_id.*'  => 'required',
      );
      $error = Validator::make($request->all(), $rules);
      if($error->fails())
      {
       return response()->json([
        'error'  => $error->errors()->all()
       ]);
      }
      /*
      $autonumber = DB::table("proforms as proforms")
      ->select(DB::raw('MAX(id) as id'))  
      ->get();     
      
      $number = $autonumber[0]->id;
        */
      $autonumber2 = DB::table("dynamic_fields as dynamic_fields")
      ->select(DB::raw('MAX(id) as id'))  
      ->get();
      
      
      $autonumber2[0]->id++;
      $number2 = $autonumber2[0]->id;
     
      $number = $request->id; 
      $name = $request->name;
      $PKWIU = $request->PKWIU;
      $quantity = $request->quantity;
      $unit = $request->unit;
      $netunit = $request->netunit;
      $nettotal = $request->nettotal;
      $VATrate = $request->VATrate;
      $grossunit = $request->grossunit;
      $grosstotal = $request->grosstotal;
      for($count = 0; $count < count($name); $count++)
      {
       $data = array(
        'proform_id' => $number, 
        'id_pozycji' => $number2++,  
        'name' => $name[$count],
        'PKWIU'  => $PKWIU[$count],
        'quantity' => $quantity[$count],
        'unit'  => $unit[$count],
        'netunit' => $netunit[$count],
        'nettotal'  => $nettotal[$count],
        'VATrate' => $VATrate[$count],
        'grossunit'  => $grossunit[$count],
        'grosstotal' => $grosstotal[$count],
        
       );
       $insert_data[] = $data; 
      }

      DynamicField::insert($insert_data);
      
      return response()->json([
       'success'  => 'Data Added successfully.'
      ]);
     }
    }
}

这是我观点的完整代码:

<html>
 <head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Laravel 5.8 - DataTables Server Side Processing using Ajax</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
 </head>
 <body>
 
@extends('layouts.app')


@section('content')
    <div class="row">
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Dodaj pozycje do proformy numer <?php echo $id ?></h2>
            </div>

        </div>
    </div>


    @if ($errors->any())
        <div class="alert alert-danger">
            <strong>Whoops!</strong> There were some problems with your input.<br><br>
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif


  

 

 

    <div class="table-responsive">
                <form method="post" id="dynamic_form">
                 <span id="result"></span>
                 <table class="table table-bordered table-striped" id="user_table">
               <thead>
                <tr>
                    <th width="10%">Nazwa towaru lub usługi</th>
                    <th width="10%">PKWiU</th>
                    <th width="10%">Ilość</th>
                    <th width="10%">Jednostka</th>
                    <th width="10%">Cena netto</th>
                    <th width="10%">Netto razem</th>
                    <th width="10%">Stawka VAT</th>
                    <th width="10%">Brutto jednostka</th>
                    <th width="10%">Brutto razem</th>
                    <th width="10%">Action</th>
                </tr>
               </thead>
               <tbody>

               </tbody>
               <tfoot>
                <tr>
                                <td colspan="2" align="right">&nbsp;</td>
                                <td>
                  @csrf
                  <input type="submit" name="save" id="save" class="btn btn-primary" value="Save" />
                 </td>
                </tr>
               </tfoot>
           </table>
                </form>
                @endsection   
   </div>
  
 </body>
</html>


<script>
$(document).ready(function(){

 var count = 1;

 dynamic_field(count);

 function dynamic_field(number)
 {
  html = '<tr>';
        html += '<td><input type="text" name="name[]" class="form-control" /></td>';
        html += '<td><input type="text" name="PKWIU[]" class="form-control" /></td>';
        html += '<td><input type="text" name="quantity[]" class="form-control" /></td>';
        html += '<td><input type="text" name="unit[]" class="form-control" /></td>';
        html += '<td><input type="text" name="netunit[]" class="form-control" /></td>';
        html += '<td><input type="text" name="nettotal[]" class="form-control" /></td>';
        html += '<td><input type="text" name="VATrate[]" class="form-control" /></td>';
        html += '<td><input type="text" name="grossunit[]" class="form-control" /></td>';        
        html += '<td><input type="text" name="grosstotal[]" class="form-control" /></td>';
        if(number > 1)
        {
            html += '<td><button type="button" name="remove" id="" class="btn btn-danger remove">Remove</button></td></tr>';
            $('tbody').append(html);
        }
        else
        {   
            html += '<td><button type="button" name="add" id="add" class="btn btn-success">Add</button></td></tr>';
            $('tbody').html(html);
        }
 }

 $(document).on('click', '#add', function(){
  count++;
  dynamic_field(count);
 });

 $(document).on('click', '.remove', function(){
  count--;
  $(this).closest("tr").remove();
 });

 $('#dynamic_form').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url:'{{ route("dynamic-field2.insert") }}',
            method:'post',
            data:$(this).serialize(), id: "<?php echo $id ?>",
            dataType:'json',
            beforeSend:function(){
                $('#save').attr('disabled','disabled');
            },
            success:function(data)
            {
                if(data.error)
                {
                    var error_html = '';
                    for(var count = 0; count < data.error.length; count++)
                    {
                        error_html += '<p>'+data.error[count]+'</p>';
                    }
                    $('#result').html('<div class="alert alert-danger">'+error_html+'</div>');
                }
                else
                {
                    dynamic_field(1);
                    $('#result').html('<div class="alert alert-success">'+data.success+'</div>');
                }
                $('#save').attr('disabled', false);
            }
        })
 });

});
</script>






<p class="text-center text-primary"><small>ARTplus 2020</small></p>










 
 </body>
</html>

【问题讨论】:

  • 将其放入表单的数据属性中并使用您的 jquery 来获取它
  • 将此值 &lt;?php echo $id ?&gt; 放在引号中,例如 "",然后按 F12 或检查元素在网络选项卡中检查您的请求。如果它正确发送到服务器端,则尝试回显id 并在下一行输入die。如果值正确,您应该像这样调试,然后您应该检查数据库中的字段类型。
  • 您可以记录或返回 $request->all() 以查看通过 ajax 帖子传递的信息吗?看起来您正在寻找 proform_id.* 但您的 ajax 正在发送 proform:{{id}}
  • serialize() 生成一个类似a=1&amp;b=2&amp;c=3 的查询字符串,而不是一个转换为 JSON 的对象,因此请使用相同的概念连接您的值
  • 如果你要调用它 proform 然后在 php 中寻找名为 id 的东西也将不起作用

标签: javascript php json ajax laravel


【解决方案1】:

让我们试试下面的代码:

    var id = "<?php echo $id; ?>";
    data: $(this).serialize() + '&proform=' + id,

【讨论】:

  • 这行? $(document).ready(function(){ var id = ""; var count = 1;
  • 好的,检查了这段代码,它没有帮助。我从中得到空值
  • 你检查了id的值吗?让我们使用 alert(id) 或 console.log(id) 来确认;
  • 我正在使用 echo 在表单中显示此值。
  • 你能分享你的“观点”代码片段吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多