【问题标题】:Simple Ajax Post in laravel 5 not workinglaravel 5中的简单Ajax Post不起作用
【发布时间】:2018-01-06 22:55:30
【问题描述】:

我使用一个非常简单的表单来发送 ajax 发布请求,但它在控制台中显示 500 (internal server error),当我单击该链接时,它会打开一个文件并显示错误在这一行

// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );

发送请求的页面是demotest.blade.php

接收请求的URL是ajaxpage,转发给AjaxController@postData

这是我的 web.php 文件

Route::get('/demotest', function(){
    return view('admin/posts/demotest');
});

Route::post('/ajaxpage', 'AjaxController@postData');

这是我的demotest.blade.php 文件

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row">

        <form id="myform" method="POST" action="{{ url('/ajaxpage') }}">
            {!! csrf_field() !!}

            <input id="token_field" name="_token" type="hidden" value="{{csrf_token()}}">

            <input id="firstname" type="text" name="firstname" />
            <input type="submit" value="submit" />
        </form>

        <div id="display_here"></div>

        </div>
    </div>
@endsection

@section('jscript')

<script>

    $( document ).ready(function() {

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

        $('#myform').on('submit', function (e) {

            e.preventDefault();

            var firstname = $("#firstname").val();

            $.ajax({
                type: "POST",
                url: "/ajaxpage",
                data:{
                    firstname: firstname,
                    _token: $('#token_field').val()
                  },
                dataType : 'json',
                success: function( data ) {
                    console.log(data);
                    $('#display_here').html(data);
                }
            });

        });
    });

</script>

@endsection

它由单个字段和提交按钮和用于发送 ajax 请求的 jquery 组成

这是处理请求的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AjaxController extends Controller
{
    public function postData(Request $request)
    {
        return Response()->json($request::all());
    }
}

就是这样。我仍然收到错误消息。请帮我解决这个问题。

【问题讨论】:

    标签: jquery ajax laravel laravel-5


    【解决方案1】:

    如果您打开网络检查器并检查 XHR 请求,您将看到错误响应,因为您在包含请求属性的数组上调用方法 all() static。

    所以要修复你的错误而不是

    return Response()->json($request::all());
    

    return response()->json($request->all());
    

    或者只是为了进行健全性检查:

    return response()->json(['success'=>true]);
    

    因此,当您在浏览器上打开控制台时,您应该会得到响应。

    【讨论】:

    • 它在更正后在演示项目上工作,但在复制文件后,因为它在我的工作项目中,然后它现在不工作了。它显示相同的错误 500(内部服务器错误)
    • php artisan config:clear 和 php artisan route:clear。应该工作相同
    【解决方案2】:

    您需要使用$request 作为表单属性的数组或对象。没有必要在一个表单中使用多个 csrf_token。每个会话一个随机的不可猜测的令牌就足够了。

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 2015-07-21
      • 2014-11-13
      • 1970-01-01
      • 2015-11-19
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多