laravel 5 和 Ajax 从数据库中获取数据:

laravel 5 and Ajax get data from database:

我有简单的表格:

{{ Form::open(array('id' => 'frm')) }}

  <div class="form-group">
    {!!  Form::label('id','id:'); !!} 
    {!!  Form::text('id',null,['class' => 'form-control']); !!} 
  </div>

  <div class="form-group">
    {!!  Form::submit('Update',['class' => 'btn btn-primary form-control']); !!} 

{!! Form::close() !!}

我想 post 将表单输入字段中的值发送到控制器,然后在控制器方法中 运行 在数据库中查询表单中的 id 值。最后,使用 ajax,显示数据库查询的结果,如果没有结果则显示一条消息提醒用户。

我试过这个:

<script>
    $("document").ready(function(){
        $("#frm").submit(function(e){
            e.preventDefault();
            var customer = $("input[name=postal]").val();
            $.ajax({
                type: "POST",
                url : "http://laravel.test/ajax",
                data : dataString,
                dataType : "json",
                success : function(data){

                }
            }, "json");
        });
    });//end of document ready function
</script>

我尝试了几种方法来获取控制器中的 post 数据,但都没有成功。

---问题一:

当我尝试在路由中使用它时出现问题:

Route::post('ajax', function() { // callback instead of controller method
    $user = App\User::find(\Input::get('id');
    return $user; // Eloquent will automatically cast the data to json
});

我收到语法错误,在第二行 (;)

此外,我尝试在控制器中获取数据并打印它们:

 if(Request::ajax()) {
      $data = Input::all();

      print_r($data);die;
    }

ROUTES.PHP

Route::post('/', 
  ['as' => 'first_form', 'uses' => 'TestController@find']);

Route::get('/', 'TestController@index');
  Route::post('ajax', function() { // callback instead of controller method
        $user = App\User::find(\Input::get('id');
        return $user; // Eloquent will automatically cast the data to json
    });

函数:

    public function ajax()

    {
        //

  // Getting all post data
    if(Request::ajax()) {
      $data = Input::all();
      print_r($data);die;
    }

    }

我找到了更多方法将数据从视图发送到控制器,但甚至不想显示 posted 数据。我检查了 fire-bug,在 post 请求

中有 posted 值

您似乎向 ajax 方法传递了一个不存在的变量。尝试直接将表单数据传递给它,看看是否会产生任何结果,您可以使用 serialize 方法:

$("#frm").submit(function(e){
    e.preventDefault();
    var form = $(this);
    $.ajax({
        type: "POST",
        url : "http://laravel.test/ajax",
        data : form.serialize(),
        dataType : "json",
        success : function(data){
            if(data.length > 0) {
              console.log(data);
            } else {
              console.log('Nothing in the DB');
            }
        }
    }, "json");
});

ajax 调用现在包含 console.log,因此它将在控制台中输出返回给它的任何内容。

routes.php(例子)

Route::post('ajax', function() { // callback instead of controller method
    $user = App\User::find(\Input::get('id'));
    return $user; // Eloquent will automatically cast the data to json
});

请记住,我只是将代码作为示例,因为您没有将控制器代码放入问题中。

编辑

我将做一个非常简单的例子,对你有用。我重新安装了 laravel 并对其进行了编码,它对我来说工作正常。请认真跟进。

app/Http/routes.php

<?php
// route for our form
Route::get('/', function() {
    return view('form');
});
// route for our ajax post request
Route::post('ajax', function() {
    // grab the id
    $id = \Input::get('id');

    // return it back to the user in json response
    return response()->json([
        'id' => 'The id is: ' . $id
    ]);
});

resources/views/form.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Ajax Example</title>
</head>
<body>

    {!! Form::open(['url' => 'ajax', 'id' => 'myform']) !!}
        <div class="form-group">
            {!!  Form::label('id','id:') !!} 
            {!!  Form::text('id', null, ['class' => 'form-control']) !!} 
        </div>

        <div class="form-group">
            {!!  Form::submit('Update',['class' => 'btn btn-primary form-control']); !!} 
        </div>
    {!! Form::close() !!}

    <div id="response"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
    $("document").ready(function(){
        // variable with references to form and a div where we'll display the response
        $form = $('#myform');
        $response = $('#response');

        $form.submit(function(e){
            e.preventDefault();

            $.ajax({
                type: "POST",
                url : $form.attr('action'), // get the form action
                data : $form.serialize(), // get the form data serialized
                dataType : "json",
                success : function(data){
                    $response.html(data['id']); // on success spit out the data into response div
                }
            }).fail(function(data){
                // on an error show us a warning and write errors to console
                var errors = data.responseJSON;
                alert('an error occured, check the console (f12)');
                console.log(errors);
            });
        });

    });
</script>

</body>
</html>