简体   繁体   English

Laravel Ajax将数据发布到数据库中

[英]Laravel Ajax posting data into the database

This is my index.php

    <div class="container">
    <h1>Drink A Coffee today</h1> <hr>
       <h2>Coffee Orders</h2>
    <ul id="orders">
    <p><li class="highlight"></li></p>
    <p><li class="highlight"></li></p>
    </ul>

    <h4>Add a Coffee Order</h4>

    {!! Form::open(['url' => 'index', 'method' => 'POST']) !!}
     <div class="form-group" role="form">
    <p>
        <label for="name">Name:</label>
        <input id="name" type="text" name="name" class="form-control">
    </p>

    <p>
        <label for="drink">Drink:</label>
        <input id="drink" type="text" name="drink" class="form-control">
    </p>
    <p>
        <button id="add-order" class="btn btn-default" type="submit">Add!</button>
    </p>
</div>
{!! Form::close() !!}
</div>

Below is my controller 下面是我的控制器

public function makeOrder() {
      $post = Request::all();

      if (Request::ajax()) {
        $order = new Order;

        $order->name = $post['name'];
        $order->drink = $post['drink'];

        $order->save();
        $response = array(
        'status' => 'success',
        'msg' => 'Option created successfully',
        );

        return Response::json( $response );
      }
    }

//Below is my Route

Route::post('index', 'MakeOrderController@makeOrder');

then my Ajax script 然后是我的Ajax脚本

$(document).ready(function() {

    $('#add-order').click(function(e) {
        e. preventDefault();
        //setting variables based on the input fields
        var inputName = $('input[name="name"]').val();
        var inputDrink = $('input[name="drink"]').val();
        var token = $('input[name="_token"]').val();
        var data = {name:inputName, drink:inputDrink, token:token};

        var request = $.ajax({

            url: "index",
            type: "POST",
            data: data,
            dataType:"html"
            });

            request.done(function( msg ) {
                var response = JSON.parse(msg);
                console.log(response.msg);
            });

            request.fail(function( jqXHR, textStatus ) {
                console.log( "Request failed: " + textStatus );
            });
        });



});

But any time i try to submit, nothing happends and when i inspect element, i get this error "Failed to load resource: the server responded with a status of 500 (Internal Server Error) Request failed: error" 但是,无论何时我尝试提交,什么都没有发生,当我检查元素时,我会收到此错误“无法加载资源:服务器以状态500(内部服务器错误)响应为请求失败:错误”

Ah, I think I see it now. 嗯,我想我现在看到了。 In your AJAX data, you are sending 'token', but Laravel is expecting this parameter to be named '_token'. 在您的AJAX数据中,您正在发送“令牌”,但是Laravel希望将此参数命名为“ _token”。

You can make it easier on yourself by just using jQuery's serialize() function on the form, instead of retrieving each field as a variable. 您只需在表单上使用jQuery的serialize()函数,而不是将每个字段都作为变量检索,就可以使自己更轻松。 Ex: 例如:

var data = $(this).closest('form').serialize();

Instead of var inputName, var inputDrink, etc 代替var inputName,var inputDrink等

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM