Laravel5-Ajax POST-$request->;all()返回PostController中的空数组
抱歉,我重复了一遍,但我已经尝试了每一个问题的每一个建议,甚至是模糊地类似于此,没有结束 阿贾克斯邮报:Laravel5-Ajax POST-$request->;all()返回PostController中的空数组,ajax,laravel,http-post,Ajax,Laravel,Http Post,抱歉,我重复了一遍,但我已经尝试了每一个问题的每一个建议,甚至是模糊地类似于此,没有结束 阿贾克斯邮报: var contactForm = $('#contactForm'); contactForm.on('submit', (event) => { event.preventDefault() $.ajaxSetup({ headers: { 'X-CSRF-TOKEN' : $
var contactForm = $('#contactForm');
contactForm.on('submit', (event) => {
event.preventDefault()
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')
}
})
console.log(contactForm.serializeArray())
$.ajax({
dataType: "json",
method : 'POST',
url : 'contact-us/post',
data : contactForm.serializeArray(),
success: (res) => {
console.log(res)
}
})
})
路线处理站:
Route::post('contact-us/post', 'EnquiryPostController@store');
后控制器存储方法:
public function store(Request $request)
{
return response()->json(['success'=>$request->all()]);
}
更新:
我想澄清一下:
- 我正在传递CSRF令牌
- 表单输入具有名称属性
- PostController正在接收POST请求,但不包含任何表单数据
- 这个问题发生在AJAX POST和常规旧表单POST中
类型而不是类似的方法来处理ajax请求
$.ajax({
dataType: "json",
type : 'POST',
url : 'contact-us/post',
data : contactForm.serializeArray(),
success: (res) => {
console.log(res)
}
})
您可以使用以下解决方案发送数据:
data : contactForm.serialize()
事实证明,这不是Laravel问题,而是Windows Server/web.config问题。我会使用找到的XML设置我的站点。经过多次尝试和错误,使用以下XML解决了该问题:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<ModSecurity enabled="true" configFile="c:\inetpub\wwwroot\modsecurity.conf" />
<httpErrors errorMode="Detailed" />
<modules runAllManagedModulesForAllRequests="true" />
<defaultDocument>
<files>
<clear />
<add value="index.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^dev\.financialservicesexpo\.co\.uk$" negate="true" />
</conditions>
<action type="Redirect" url="http://dev.financialservicesexpo.co.uk/{R:1}" />
</rule>
<rule name="default" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.php" />
</rule>
</rules>
</rewrite>
<staticContent>
<clientCache cacheControlMaxAge="8.00:00:00" cacheControlMode="UseMaxAge"/>
</staticContent>
</system.webServer>
</configuration>
我希望我能解释为什么这样可以解决这个问题,但我对服务器配置的了解很少。如果有人想发表见解深刻的评论,我至少会觉得很有趣
如果没有帮助,请阅读下面的内容
要想弄清这个问题的真相,需要尝试在StackOverflow等网站上发布的更多问题中找到许多不同的解决方案。在与同事聊天并大声解决问题后,两分钟内最终解决了这个问题。这是我一直需要学习的令人沮丧的一课。。。因此,希望这能帮助其他人,以下是您应该检查的上述解决方案的列表
- 检查表单输入是否具有名称属性
- 清除浏览器缓存
- 清除Laravel缓存数据李>
- 重新启动网站
- 使用AJAX时,请尝试serialize()和serializeArray()
- 使用AJAX时,请尝试使用不同的数据类型和内容类型提交。默认值应该很好,但如果您做了一些不同的事情,那么值得一喊
- CSRF令牌:通过隐藏输入字段或在请求头中设置添加它。应该只需要一个李>
- 确保/storage和/bootstrap文件夹已启用读/写权限
如果有人对我在这里写的内容有任何建议或更正,请大声说出来。我决不是专家。你能从请求中看出数据正在发送吗?您正在显示的日志来自console.log(contactForm.serializeArray())?这是右下方的{success:Array(0)}?如果您返回任何其他值,如“success”=>“hello”,它会显示吗?return response()->json(['success'=>“hello”]);返回{success:“hello”}@johnroker删除数据类型:“json”并添加cache:false谢谢但没有效果。我修改了ajax,但$request->all()仍返回空数组:(