FormData не получает никаких значений, только токен

#jquery #laravel

#jquery #laravel

Вопрос:

Моя форма работала нормально, но потом что-то произошло. Он не получает никаких значений, там присутствует только токен. Я не знаю, что делать. Вот форма

 <form id="addProductForm" method="POST" action="javascript:void(0)" enctype="multipart/form-data">
    {{ csrf_field() }}
    <input type="hidden" id="productId">
    <div class="row">
        <div class="form-group col-md-3">
            <label for="name">Name</label>
            <input required type="text" name="name" class="form-control" id="name">
        </div>
        <div class="form-group col-md-3">
            <label for="minOrder">Min Order</label>
            <input required type="number" name="min_order" class="form-control" id="minOrder">
        </div>
        <div class="form-group col-md-3">
            <label for="units">Select Unit:</label>
            <select required class="form-control" name="units_id" id="units">
                <option value="" selected disabled>Select Unit</option>
                @foreach ($units as $unit)
                    <option value="{{$unit->id}}">{{$unit->name}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group col-md-3">
            <label for="selection">Select Selection:</label>
            <select required class="form-control" name="selections_id" id="selections">
                <option value="" selected disabled>Select Selection</option>
                @foreach ($selections as $selection)
                    <option value="{{$selection->id}}">{{$selection->name}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group col-md-3">
            <label for="subcategory">Select Subcategory:</label>
            <select required class="form-control" name="subcategories_id" id="subcategory">
                <option value="" selected disabled>Select Subcategory</option>
                @foreach ($subcats as $subcat)
                    <option value="{{$subcat->id}}">{{$subcat->name}}</option>
                @endforeach
            </select>
        </div>
        <input type="hidden" id="catId">
        <div class="form-group dynamicSizeAddPrice">
            
        </div>
        <div class="form-group col-md-5">
            <label for="description">Description</label>
            <textarea required class="form-control" name="description" rows="4" id="description"></textarea>
        </div>

        <div class="row">
            <div class="custom-file" >
                <input required type="file" class="custom-file-input custom-file-input1" name="image" id="image">
                <label class="custom-file-label custom-file-label1" for="image">Choose First Image</label>
            </div>
            <div class="custom-file">
                <input required name="image_second" type="file" class="custom-file-input custom-file-input2" id="secondImage">
                <label class="custom-file-label custom-file-label2" for="secondImage">Choose Second Image</label>
            </div>
        </div>
        
    </div>
    <div class="row ">
        <button type="submit" id="submitAddProduct" class="btn btn-primary mr-auto ml-auto" style="margin-top:15px;">Submit</button>
    </div>
</form>
  

Вот маршруты

 Route::group(['middleware' => 'role:admin'], function() {
    Route::get('/addProduct','AdminController@addProduct');
    Route::post('/submitAddProduct','AdminController@submitAddProduct');
    Route::get('/submitAddProductPrice','AdminController@submitAddProductPrice');
    
 
 });
  

Вот контроллер

 
    public function submitAddProduct(Request $request){

        $data = $request->validate([
            'image' => ['required','image'],
            'image_second' => ['required','image']
        ]);

        // dd(request('image')->store('uploads','public'));

        $imagePath = request('image')->store('uploads','public');

        $image = Image::make(public_path("storage/{$imagePath}"));
        $image->save();

        $imagePath2 = request('image_second')->store('uploads','public');

        $image2 = Image::make(public_path("storage/{$imagePath2}"));
        $image2->save();

        $dataVal = $request->all();

        $dataVal['image'] = $imagePath;
        $dataVal['image_second'] = $imagePath2;

        // d3d($dataVal);

        $d = Products::create($dataVal);

        $id = $d->id;

        if($id){
            $arr = array('msg' => $id);
        }
        return Response()->json($arr);
    }
  

Ошибка заключается в

 422 Unprocessable Entity
{"message":"The given data was invalid.","errors":{"image":["The image field is required."],"image_second":["The image second field is required."]}}
  

Мой Ajax

 $('#submitAddProduct').click(function(e){
                e.preventDefault();

                var $myForm = $("#addProductForm");
                $myForm[0].checkValidity();
                $myForm[0].reportValidity();

                if($myForm[0].checkValidity()){

                    var idArray = [];

                    var l = $('.dynamicSizePriceRow').length;

                    for(var i=0;i<l;i  ){$('.dynamicSizePriceRow').eq(i).map(function() {
                        idArray.push($(this).attr('id'));
                    });}

                    var priceSizeArray = [];

                    $.ajax({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        },
                        method:"POST",
                        url:'/submitAddProduct',
                        async:false,
                        contentType: false,
                        cache: false,
                        processData: false,
                        data: new FormData($('form')[0]),

                        success:function(response) {
                            $('#productId').val(response.msg);
                        }
                    });

                    for(var i=0;i<l;i  ){
                        priceSizeArray.push({
                            ['size_id'] : idArray[i],
                            ['price'] : $('.price' idArray[i]).val(),
                            ['stockFlag'] : $('.stock' idArray[i]).prop("checked"),
                            ['products_id'] : $('#productId').val()
                        });
                    }


                    $.ajax({
                        type:'GET',
                        url:'/submitAddProductPrice',
                        async:false,
                        data:{
                            'priceSizeArray' : priceSizeArray
                        },
                        success:function(response) {
                            getAdminProductList(response.success);
                        }
                    });
                }
                
            });
  

Как это возможно, это просто работало нормально, после этого я применял роли пользователей и авторизацию к приложению. Но я не трогал код, только web.php
Пожалуйста, помогите!!

Ответ №1:

Решение было странным, я не знаю, что это такое. Мне пришлось изменить свой ajax на этот

 $myForm[0].checkValidity();
                $myForm[0].reportValidity();
                if($myForm[0].checkValidity()){
                    var idArray = [];

                    var l = $('.dynamicSizePriceRow').length;

                    console.log("l "   l)

                    for(var i=0;i<l;i  ){$('.dynamicSizePriceRow').eq(i).map(function() {
                        idArray.push($(this).attr('id'));
                    });}

                    var priceSizeArray = [];

                    $.ajax({
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        },
                        method:"POST",
                        url:'/submitEditProduct',
                        async:false,
                        contentType: false,
                        cache: false,
                        processData: false,
                        data: new FormData($myForm[0]),

                        success:function(response) {
                            
                        }
                    });
  
 data: new FormData($('form')[0]),
  

Для

 data: new FormData($myForm[0]),
  

Я не знаю, в чем проблема, но сейчас она работает нормально