使用ajax调用来编辑数据时,我遇到了一些接收数据的问题。我试图获取用户已填写的数据,但每次我的数据为空或“空”时都是如此。我需要在ajax调用中传递数据吗?或者laravel还有其他方法来获取数据吗?
我们说话时的代码:
的 showuser.blade.php
<div class="comments">
@if(count($user->cars))
<h1>Auto in reparatie</h1>
<hr>
@foreach($user->cars as $car)
<!-- Form to show each car and edit / delete the cars -->
<!--<form action="{{ action('CarController@edit', [$user->id, $car->id]) }}" method="POST">-->
<form>
<div class="form-group">
<label for="brand">Merk:</label><br>
<select name="brand">
@foreach($brands as $brand)
<option value="{{$brand->id}}"{{ $brand->id == $car->brand_id ? ' selected="selected"' : '' }}>{{$brand->brandname}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="year">Bouwjaar:</label><br>
<input type="text" value="{{$car->year}}" name="year">
</div>
<div class="form-group">
<label for="licentsplate">Kenteken:</label><br>
<input type="text" value="{{$car->licensplate}}" name="licenseplate">
</div>
<div style="float: left; width: 80px">
<input type="submit" class="btn btn-primary" value="Edit" id="{{$car->id}}" name="editcar" />
</div>
</form>
<form>
<div class="form-group">
<button class="btn btn-primary" name="deletecar" id="{{$car->id}}">Delete</button>
</div>
</form>
@endforeach
@endif
</div>
脚本
<script type="text/javascript">
$( document ).ready(function() {
$('[name="editcar"]').click(function (e){
e.preventDefault();
$.ajax({
type: "POST",
url: '/users/{{$user->id}}/cars/'+this.id,
success:function(data){
if(!data.error){
location.reload(true);
}
}
})
});
});
</script>
路线
Route::post('/users/{userId}/cars/{carId}', 'CarController@edit');
CarController.php
// Function to edit a car by ID
public function edit($userId, $carId)
{
$car = Car::where('id', $carId)->where('user_id', $userId)->first();
$car->brand_id = request('brand');
dd(request('year'));
$car->year = request('year');
$car->licensplate = ('licenseplate');
$car->save();
}
如果我转储请求(&#39;品牌&#39;),请求(&#39;年份&#39;),请求(&#39;牌照&#39;)我得到&#39; null& #39 ;.
编辑: 如果我在我的控制器中购买汽车,我就得到了我需要的汽车。意味着没有问题找到合适的汽车。
阅读的Thx!
答案 0 :(得分:2)
您不会在AJAX请求中发布任何数据。将表单值传递到对象中。
var form = $(this).find('form');
var licenseval = form.find('input[name=licenseplate]').val();
var yearval = form.find('input[name=year]').val();
var brandval = form.find('select[name=brand]').find(":selected").val();
$.ajax({
type: "POST",
data: {licenseplate: licenseval, year: yearval, brand: brandval}
url: '/users/{{$user->id}}/cars/'+this.id,
success:function(data){
if(!data.error){
location.reload(true);
}
}
});
答案 1 :(得分:0)
更改以下行:
public function edit($userId, $carId)
到
public function edit(Request $request, $userId, $carId)
并使用
use Illuminate\Http\Request;
之后,您可以在控制器功能中使用$userId
,$carId
。
答案 2 :(得分:0)
根据你的ajax电话,你只是在呼叫路线
Route::post('/users/{userId}/cars/{carId}', 'CarController@edit');
但你没有传递任何其他价值。您的应用程序正在按预期工作。
$.ajax({
type: "POST",
url: '/users/{{$user->id}}/cars/'+this.id,
//data: dataObject, ----->Missing Data which you want to pass (brand, year, licenceplate)
success:function(data){
//...
}
})
您正在迭代多个$cars
,您需要获取当前car's
数据并传递给ajax调用。