对于重复道歉,但我已经尝试过每一个建议,每一个问题,甚至隐约类似于此没有结束。
阿贾克斯后:
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');
PostController中存储方法:
public function store(Request $request)
{
return response()->json(['success'=>$request->all()]);
}
控制台输出
从网络标签响应头
从网络标签请求头
从网络标签数据
更新:
只是为了澄清:
- 我传递的CSRF令牌。
- 该表单输入有名称的属性。
- 所述PostController中正在接收POST请求而只是不包含任何形式的数据。
- 这个问题发生与AJAX POST和普通的旧表单POST
原来这不是一个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尝试两种序列化()和serializeArray()
- 当使用AJAX尝试用不同的数据类型和CONTENTTYPES提交。 默认的应该是罚款,但如果你做一些不同的值得欢呼。
- CSRF令牌:通过任一个隐藏的输入字段添加它,或在请求标题中。 只有一个应该是必要的。
- 确保/存储和/引导文件夹具有读/写权限启用。
如果任何人有任何建议或更正我在这里写的请不要说出来。 我决不是一个专家。
使用您的Ajax请求尝试type
的替代method
一样
$.ajax({
dataType: "json",
type : 'POST',
url : 'contact-us/post',
data : contactForm.serializeArray(),
success: (res) => {
console.log(res)
}
})
您可以使用下面的解决方案来发送数据:
data : contactForm.serialize()
文章来源: Laravel 5 - Ajax POST - $request->all() returns empty array in PostController