Laravel 4:Input::all() 使用 $.ajax POST 不返回任何数据

Posted

技术标签:

【中文标题】Laravel 4:Input::all() 使用 $.ajax POST 不返回任何数据【英文标题】:Laravel 4: Input::all() returns no data with $.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 不,我想我之前尝试过这样做,但没有成功。 【参考方案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

以上是关于Laravel 4:Input::all() 使用 $.ajax POST 不返回任何数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 4 中返回 Input::except() 多个输入

laravel5.4 正式环境 linux 下出现undefined code

Laravel Request 和 Laravel Input 常用操作方法

在 Laravel 中下载后如何重定向?

在 Laravel 4 中检索验证器错误消息

无法实例化抽象类Illuminate Database Eloquent Model - Laravel 4