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()仍返回空数组:(