我使用一个非常简单的表单来发送ajax post请求,但它在控制台中显示500 (internal server error)
,当我点击该链接时,它会打开一个文件并显示错误在此行中
// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );
发送请求的页面为demotest.blade.php
接收请求的网址为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());
}
}
就是这样。我仍然得到一个错误。请帮我解决这个问题。
答案 0 :(得分:1)
如果打开网络检查器并检查XHR请求,您将看到错误响应,因为您在包含请求属性的数组上调用方法all()
static。
所以要修复你的错误,而不是
return Response()->json($request::all());
DO
return response()->json($request->all());
或只是为了进行健全性检查:
return response()->json(['success'=>true]);
因此,当您在浏览器上打开控制台时,您应该得到响应。
答案 1 :(得分:0)
您需要使用$request
作为表单属性的数组或对象。不需要在表单中使用多个csrf_token。每个会话一个随机的不可语量令牌就足够了。