Laravel 5:使用Ajax Post Request时,请求数据为空

时间:2017-03-07 08:23:46

标签: php jquery ajax laravel laravel-5

使用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!

3 个答案:

答案 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调用。