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' => '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