【问题标题】:Laravel 5.1 save something in database with ajax callLaravel 5.1 使用 ajax 调用在数据库中保存一些东西
【发布时间】:2015-10-31 09:42:35
【问题描述】:

我正在构建一个用户可以上传项目的应用程序。我正在实施一个用户可以“喜欢/不喜欢”其他项目的系统。我正在尝试使用 AJAX 调用来保存喜欢。用户可以在项目的详细信息页面(/projects/{id})上为项目点赞

我有一个表用户、项目和喜欢。我的计划是显然将喜欢保存在喜欢表中,因此记录如下所示:id、user_id、project_id。将来我可以做一个 COUNT 查询并找出每个项目有多少喜欢等等。

由于某种原因,当我单击“赞”按钮时,我的应用程序卡住并一直加载直到崩溃。

我的文件: 阿贾克斯调用

$(document).ready(function(){
        console.log("js loaded");
        $('#likeform').on('submit', function(e) {
            console.log("like submitted");
            e.preventDefault();

            $.ajax({
                url: $(this).parent().attr('action'),
                type: "post",
                data: {'_token': token, 'user_id': $('input[name=user_id]').val(), 'project_id': $('input[name=project_id]').val()},
                success: function(data){
                    alert(data);
                }
            })
        });
    });

我的表格

  {!! Form::open(array('url'=>'projects/'.$project->id.'/like','method'=>'POST', 'id'=>'likeform')) !!}
    <input type="hidden" id="token" value="{{ csrf_token() }}">
    {!! Form::Submit('Like', array('class'=>'send-btn')) !!}
{!! Form::close() !!}

我的路线:

Route::get('/', 'LikeController@index');
Route::post('projects/{id}/like', 'LikeController@like');

我在 LikeController 中的点赞功能:

public function like()
{
    if(Request::ajax()) {
        $data = Input::all();
        print_r($data);die;
    }
}

【问题讨论】:

  • 加载时浏览器控制台会说什么吗?你检查你的 laravel.log 了吗?提供任何类型的错误都会大大提高您获得正确答案的机会。
  • 我的控制台中什么都没有。而且我完全没有错误,这有点烦人。
  • 很奇怪。无论如何,我没有测试你的代码,但是你试图从你的表单中检索一个action 属性,而它没有。您确实设置了url。我不确定这就是你要找的东西,但值得一试。旁注:使用Form 外观构建一个表单会自动设置一个隐藏的token 字段,因此实际上不需要在表单中添加第二个。
  • 哦,好吧,我想知道为什么有 2 个隐藏的令牌字段。现在我知道了:)
  • action vs url 是一派胡言。我的错。仍然很奇怪,您没有收到任何错误,至少在服务器日志中。

标签: php jquery mysql ajax laravel


【解决方案1】:

卡住并继续加载直到崩溃

部分可能与 ajax 帖子期望某种响应的事实有关,但您的控制器中根本没有响应。尝试类似

public function like()
{
    if(Request::ajax()) {
        $data = Input::all();
        return Response::json([
                'error' => false,
                'insertedData' => $data
            ], 200);
    }
}  

请记住您的控制器中的use Response。现在你正在向 ajax 调用返回一些东西,你应该能够访问 $data

success: function(data){
            alert(data.insertedData);
         }

您是否遇到同样的行为?如果没有,您可以继续执行实际的数据库插入。

【讨论】:

  • 我已经尝试了你的答案,但不幸的是我仍然遇到同样的行为
  • @MoussaChaabar 好吧,这变得更奇怪了。您应该尝试在开发人员模式下测试您的代码,并尝试了解哪里/谁失败了。 ajax 中的几个断点称这是一个好的开始。我仍然不明白为什么你没有收到任何错误。你可以尝试在你的ajax中设置一个error回调,比如error: function(data){ console.log(data);}。至少这应该告诉我们是否实际执行了 ajax 调用。
猜你喜欢
  • 2011-05-17
  • 2015-02-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多