Не удается получить переменную $ id из представления в контроллере и БД с помощью Ajax

#javascript #php #json #ajax #laravel

#javascript #php #json #ajax #laravel

Вопрос:

В представлении я вижу переменную $ id, но когда я отправляю ее с помощью Ajax, я получаю NULL в БД.

Я отправляю переменную $ id из представления с помощью Ajax следующим образом:

 $.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 AppHttpControllers;
use DB;
use IlluminateHttpRequest;
use AppDynamicField;
use Validator;
use AppProform; 


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">amp;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>
  

Комментарии:

1. поместите ее в атрибут данных в форме и используйте свой jquery, чтобы получить это

2. заключите это значение <?php echo $id ?> в кавычки типа «<?php echo $id ?>», Во-вторых, проверьте свой запрос на вкладке сеть, нажав F12 или inspect element. Если она правильно отправляется на сервер, попробуйте выполнить echo id и поместите die в следующую строку. Вы должны выполнить отладку следующим образом, если значение правильное, тогда вы должны проверить тип поля в базе данных.

3. можете ли вы войти в систему или вернуть $request-> all(), чтобы увидеть, какая информация поступает через сообщение ajax? Похоже, вы ищете proform_id.* но ваш ajax отправляет proform: {{id}}

4. serialize() выдает строку запроса типа a=1amp;b=2amp;c=3 , а НЕ объект, который преобразуется в JSON, поэтому объедините свое значение, используя ту же концепцию

5. И если вы собираетесь ее вызвать, proform то поиск чего-то, что называется id в php, ТАКЖЕ НЕ СРАБОТАЕТ

Ответ №1:

Давайте попробуем приведенный ниже код:

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

Комментарии:

1. Вот эта строка? $(документ). готово(function(){ var id = «<?php echo $id; ?>»; количество переменных = 1;

2. хорошо, проверил этот код, и это не помогло. Я получаю null из этого

3. Вы проверили значение id? давайте подтвердим это с помощью alert (id) или console.log (id);

4. Я показываю это значение через форму в представлении с помощью echo.

5. Можете ли вы поделиться своим фрагментом кода «view»?