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

Posted

技术标签:

【中文标题】laravel 5 和 Ajax 从数据库中获取数据:【英文标题】:laravel 5 and Ajax get data from database: 【发布时间】:2015-06-17 13:57:06 【问题描述】:

我的表格很简单:

 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,显示 DB 查询的结果,如果没有结果,则显示一条消息提醒用户。

我试过这个:

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

我收到 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;
    

    

我发现了更多将数据从视图发送到控制器的方法,但甚至不想显示已发布的数据。我检查了fire-bug,发布请求中有发布值

【问题讨论】:

能否请您添加以下信息:您的routes.php 和您的完整控制器方法。谢谢 fyi,语法错误是因为缺少) 【参考方案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 并对其进行了编码,它对我来说工作正常。请谨慎跟进。

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

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

【讨论】:

我在 conteoller 的 ajax2 函数中尝试这样的事情 // 获取所有发布数据 if(Request::ajax()) $data = Input::all();返回视图('proba.show',compact('data')); print_r($data);死; 请使用代码编辑您的问题。您评论中的代码存在一些问题。 1.不要为ajax请求返回view,返回JSON响应,2.一旦你说return你的脚本将停止运行,所以print_rdie永远不会像你说的那样被调用return view(...已经。 终于! :) 一个问题:如果我现在想从数据库中获取一些数据,对于那个 id,我只是在 url 中:$form.attr('action'),在控制器中编写一个函数路由? 此代码:$form.attr('action') 获取表单 action 属性,因此在此处更新 url:!! Form::open(['url' =&gt; 'changeHere' 或者您可以在表单中执行路由:!! Form::open(array('route' =&gt; 'route.name')) !!。然后在你的路由中指定指向一个控制器,而不是像我一样运行回调。那有意义吗?如果您需要更多帮助,请提出新问题或告诉我。

以上是关于laravel 5 和 Ajax 从数据库中获取数据:的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 Ajax 从 Blade View 获取 html

Laravel 5:在路由中获取 ajax 数据并传递给控制器

laravel 5 简单的 ajax 从数据库中检索记录

在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据

如何从数据库中获取图像并在 laravel 中使用 ajax 以编辑形式预览它?

laravel 8 没有从 ajax 请求中获取数据