【问题标题】:Laravel 4: Input::all() returns no data with $.ajax POSTLaravel 4:Input::all() 使用 $.ajax POST 不返回任何数据
【发布时间】:2014-06-03 05:38:25
【问题描述】:

在学习 Laravel 4 的过程中,如果我的问题听起来很傻,请见谅。

我正在尝试使用 $.ajax 将表单数据发布到控制器。 检查控制器后,Input::all() 根本没有填充数据。

已检查表单是否已在 jquery 代码中序列化。 所以现在我在这里寻求帮助,看看是否有人知道如何解决这个问题。

以下是我目前编写的代码。

Jquery 代码

<script>
$(document).ready(function(){
    var BASE = "<?php echo Request::root(); ?>/signup/add";
    $('#password').on('blur', function() {
        var info = $('.info');

        $.ajax({
            url:BASE,
            method:'post',
            contentType:'application/json; charset=utf-8',
            cache:false,
            dataType:'json',
            data: $("#membersignup").serialize(),
            success:function(data){
                console.log(data);
            },
            error:function(xhr,status,error){
                //errors here
            }
        });
    });
});
</script>

route.php

Route::post('signup/add', array('uses'=>'MemberController@store'));

MemberController.php

public function store()
{
    return Response::json(Input::all());
}

【问题讨论】:

  • 发布的 URL 是否正确?您的控制台中会显示什么响应?
  • 一个空数组。 url 应该是正确的,因为脚本正在从控制器获得响应。
  • 是否启用了CSRF?您是否将CSRF token 放入表单并与其他数据一起提交?如果没有,请尝试将 CSRF 令牌添加到您的 data
  • 不,我想我之前尝试过这样做,但没有成功。

标签: php jquery ajax laravel laravel-4


【解决方案1】:

而不是使用这个创建url

var BASE = "<?php echo Request::root(); ?>/signup/add";

使用这样的命名路由:

Route::post('signup/add', array('uses' => 'MemberController@store', 'as' => 'signup.add'));

因此,您可以更轻松地为您的ajax 请求生成url,使用如下方式:

var BASE = "<?php echo route('signup.add'); ?>

如果您仍在生成正确的url,这可能无法解决您的问题,但这肯定会生成正确的url。我怀疑,您没有将请求发送到正确的url 但不确定。

【讨论】:

  • 使用(var BASE = ")时,出现错误(Route [signup.add] not defined.)。使用(Route ::post('signup/add', array('uses' => 'MemberController@store', 'as' => 'signup.add'));), console.log() 显示 (Array[0]) . 数据仍未填充。
  • 您是否在路由中使用了'as' =&gt; 'signup.add',您是否在命令行中使用了composer dump-autoload
  • 还要确保$("#membersignup").serialize() 抓取表单数据并发送到服务器。
  • 这就是我要解决的问题。我不认为数据被发送到服务器,但 url 路径等一切似乎都很好。
【解决方案2】:

由于仍然没有接受的答案,我刚刚遇到了类似的问题,并通过删除 dataType 选项并允许它自动选择来解决它。

【讨论】:

    【解决方案3】:
    Set your contentType like this...
    
    $.ajax({
            url:BASE,
            method:'post',
            contentType: 'application/x-www-form-urlencoded',
            cache:false,
            dataType:'json',
            data: $("#membersignup").serialize(),
            success:function(data){
                console.log(data);
            },
            error:function(xhr,status,error){
                //errors here
            }
        });
    

    【讨论】:

      【解决方案4】:

      我的猜测是 $.ajax 不适用于 jquery-1.11.0.min.js

      更改为 $.post,您将可以使用 Input::all()。

      【讨论】:

      • 您真的认为$.ajax 附带的主要版本的jQuery 不起作用?无论如何$.post 只使用$.ajax
      猜你喜欢
      • 2014-11-27
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多