#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]),
Я не знаю, в чем проблема, но сейчас она работает нормально