Laravel 5 - Ajax的POST - $请求 - >所有()返回在PostC

2019-11-05 03:25发布

对于重复道歉,但我已经尝试过每一个建议,每一个问题,甚至隐约类似于此没有结束。

阿贾克斯后:

    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

Answer 1:

原来这不是一个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令牌:通过任一个隐藏的输入字段添加它,或在请求标题中。 只有一个应该是必要的。
  • 确保/存储和/引导文件夹具有读/写权限启用。

如果任何人有任何建议或更正我在这里写的请不要说出来。 我决不是一个专家。



Answer 2:

使用您的Ajax请求尝试type的替代method一样

    $.ajax({
            dataType: "json",
            type : 'POST',
            url : 'contact-us/post',
            data : contactForm.serializeArray(),
            success: (res) => {
                console.log(res)
            }
    })


Answer 3:

您可以使用下面的解决方案来发送数据:

data : contactForm.serialize()


文章来源: Laravel 5 - Ajax POST - $request->all() returns empty array in PostController