【问题标题】:Ajax LARAVEL 419 POST errorAjax LARAVEL 419 POST 错误
【发布时间】:2018-03-10 09:55:49
【问题描述】:

我非常感谢您对此的帮助。 我尝试了该论坛中发布的大量解决方案,但无法使其正常工作。

我的 ajax 调用类似于

$(document).ready(function() {
    $("#company").click(function() {
        $.ajax({
            type: "POST",
            dataType:'html',
            url : "/company",
            success : function (data) {
                $("#result").html(data);
            }
        });
    });
});

我正在通过我的路线调用视图

Route::post('/company', 'Ajaxcontroller@loadContent');

和控制器

public function loadContent()
    {
        return view('listing.company')->render();
    }

我的 company.blade.php 是

    @foreach ($companies as $company)
            <div class="posting-description">
            <h5 class="header"><a href="#"></a>{{$company->name}}
            </h5>
            <h5 class="header"> {{$company->streetaddress}} {{$company->postalcode}}</h5>  
            <p class="header">
             <span class="red-text"> <?= $service; ?> </span> is available on <span class="green-text"><?php echo $date; ?></span>
           </p>
    @endforeach

我收到了这个错误

POST http://127.0.0.1:8234/company 419 (unknown status)

【问题讨论】:

  • 你知道@foreach 是一个模板引擎而不是 PHP 吗?以及如果您不调用数据库,它应该如何为公司请求数据库,而且 CSS 是一种解释性语言,所以说 它编译 CSS 文件 是不正确的!最后,是的,您应该在控制器中执行逻辑,然后将要呈现的视图结果传递给您的 Ajax!
  • 是的,我知道这一点。它不会编译像 = $service; 这样的东西。 ?> 也是。我应该如何调用数据库,你能解释一下吗?
  • 你正在使用 Laravel,一个 MVC 框架,你需要在你的控制器中创建一个动作的路由,在这个动作中你将使用 eloquent 调用数据库并将结果传递给应该渲染回来的视图HTML。
  • 我也知道这一点。我尝试这样做,但在我的情况下,我将雄辩的传递给我的视图,但是该特定视图需要从 GET 方法访问 URL 中的变量,它不能这样做。此外,我不想在该视图中包含导航栏和其他内容。
  • 您在不扩展导航栏和其他组件的情况下创建视图部分,并且只放置循环代码,我不明白您如何无法访问变量?您将变量传递给视图,这意味着它将在视图中可用!

标签: php jquery ajax laravel


【解决方案1】:

第一步:把csrf meta标签放到head里

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>Document</title>
</head>
<body>

第 2 步:使用这种 ajax 格式

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
    $(document).ready(function(){
      $("#frm").submit(function(e){
        e.preventDefault();
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
            });
        $.ajax({
                url:"{{ url('form_submit') }}",
                data:$('frm').serialize(),
                type:'post',
                success: function(result){
                    console.log(result);
                }
        });
      });
    });
</script>

【讨论】:

  • 您能否为您的答案提供更多解释,而不仅仅是提供一些代码。尤其是因为这是一个相当古老的问题,并且已经有一个问题得到了很多人的支持
【解决方案2】:

Laravel 419 post 错误通常与 api.php 和 token 授权有关

Laravel 自动为应用程序管理的每个活动用户会话生成一个 CSRF“令牌”。此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。

将此添加到您的 ajax 调用中

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

或者您可以在 VerifyCSRF 令牌中间件中排除一些 URI

 protected $except = [
        '/route_you_want_to_ignore',
        '/route_group/*
    ];

【讨论】:

  • 值得注意的是,有些人更改了元名称属性。我正在从事的项目中的那个被重命名为_token
【解决方案3】:

当活动用户会话的 CSRF“令牌”过期时,即使令牌是在 ajax 请求中指定的,您也可能会收到该错误。

【讨论】:

    【解决方案4】:

    遇到同样的问题,重新生成应用程序密钥有帮助 - php artisan key:generate

    【讨论】:

      【解决方案5】:

      当我在第二行而不是第一行有一个带有 &lt;?php 的配置文件时收到此错误。

      【讨论】:

        【解决方案6】:

        当您不发布 csrf_token 时会发生 419 错误。在您的 post 方法中,您必须将此标记与其他变量一起添加。

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题,最后是 php max post size 的问题。增加它解决了这个问题。

          【讨论】:

            【解决方案8】:

            在您的操作中,您首先需要像这样加载公司:

            $companies = App\Company::all();
            return view('listing.company')->with('companies' => $companies)->render();
            

            这将使公司变量在视图中可用,并且应该正确呈现 HTML。

            尝试使用 postman chrome 扩展来调试你的视图。

            【讨论】:

            • 我也在这样做,我只是使用紧凑函数将该公司变量传递给listing.company视图
            • 好吧,-&gt;render() 应该渲染 HTML,你应该得到一个包含 HTML 的字符串,没有刀片标签!很抱歉我没有可用的 Laravel 安装,所以我可以和你一起调试。
            【解决方案9】:

            在 laravel 中你可以使用视图渲染。 前任。 $returnHTML = view('myview')->render(); myview.blade.php 包含您的刀片代码

            【讨论】:

            • 即使我进行渲染,它也会抛出 500 错误,因为该视图无权访问搜索表单的当前 URL。
            • 去掉这个dataType:'html',
            • 我的 419 状态未知
            • 而不是这个 url : "company.php",, 必须是路由名称,你使用 Laravel MVC。
            • 是的,我在 URL 中包含了路由名称。
            【解决方案10】:

            您没有任何要提交的数据!尝试将此行添加到您的 ajax:

            data: $('form').serialize(),
            

            确保更改名称以匹配!

            您的数据也应该在表单提交函数中提交。

            您的代码应如下所示:

            <script>
            	$(function () {
            		$('form').on('submit', function (e) {
            			e.preventDefault();
            			$.ajax({
            				type: 'post',
            				url: 'company.php',
            				data: $('form').serialize(),
            				success: function () {
            					alert('form was submitted');
            				}
            			});
            		});
            	});
            </script>

            【讨论】:

            • 不过,据我所知,他在控制器中没有任何逻辑:)
            • 我的意思是他除了 AJAX 之外确实有更多问题,但他问的是 AJAX 部分,所以我只是给他这个答案:P
            猜你喜欢
            • 1970-01-01
            • 2018-05-06
            • 2018-08-24
            • 2019-08-26
            • 1970-01-01
            • 2018-12-18
            • 2021-06-11
            • 2021-10-19
            • 2020-11-07
            相关资源
            最近更新 更多