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

时间:2015-06-17 13:57:06

标签: ajax laravel views

我的形式很简单:

{{ 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() !!}

我想将表单输入字段中的值发布到控制器然后在控制器中运行数据库中的查询,以获取表单中的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数据,但没有成功。

---问题1:

当我尝试在路线中使用此功能时出现问题:

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
});

我收到sintax错误,在(;)

的第二行

另外,我尝试在控制器中获取数据而不是打印它们:

 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;
    }

    }

我发现了几种从视图向控制器发送数据的方法,但即使是woant也会发布数据。我检查了fire-bug,在post post中有发布值

1 个答案:

答案 0 :(得分:1)

看来你传递的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的全新安装并编码了这个,它对我来说很好。请仔细跟进。

应用/ 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
    ]);
});

<强>资源/视图/ 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>