Php 在Laravel5.5中,一个AJAX post请求在没有请求时重定向
我正在做基本的订阅表单,尝试使用Ajax post请求。 因为我是Ajax新手,所以我在谷歌上搜索了一些关于这个问题的信息,但没有成功,尽管这可能是一个简单的解决方案 问题是,当我提交表单时,它会给我带来错误: MethodNotAllowedHttpException无消息 查看。刀片:Php 在Laravel5.5中,一个AJAX post请求在没有请求时重定向,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我正在做基本的订阅表单,尝试使用Ajax post请求。 因为我是Ajax新手,所以我在谷歌上搜索了一些关于这个问题的信息,但没有成功,尽管这可能是一个简单的解决方案 问题是,当我提交表单时,它会给我带来错误: MethodNotAllowedHttpException无消息 查看。刀片: //Ajax <script> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="cs
//Ajax
<script>
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$("#subscribeform").submit(function (e) {
e.preventDefault();
var emailval = $('#subscriber').val();
console.log(emailval);
if(emailval !== "") {
$.ajax({
cache: false,
url: '/subscribing',
type: 'POST',
dataType: 'json',
data: {
email:emailval
},
success: function (data) {
console.log(data);
}
});
}
});
</script>
//Form
<form id="subscribeform" method="post">
<input type="text" name="subscriber" id="subscriber" placeholder=" email@example.com">
<input type="submit" value="Submit">
</form>
控制器
class SubsController extends Controller
{
public function store(Request $request)
{
$newsubscriber = new Subscriber;
$newsubscriber->email = $request->input('email');
$newsubscriber->save();
}
}
我确信名称空间很好,那么真正的问题是什么呢?根据,ajax设置中请求方法的键是“method”,而不是“type”,这意味着您的请求是默认获取的。因此,不允许使用异常中所述的方法。将“类型”更改为“方法”
您还忘记了AJAX调用中的CSRF令牌。将其添加为参数:
_token : {{ csrf_token() }}
Blade会将其插入您的js。根据上述答案,我认为这是因为
csrf\u token
,要解决您的问题,请尝试这样做
您需要按照以下文档中的建议使用ajaxSetup
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
并将其添加到模板中
<meta name="csrf-token" content="{{ csrf_token() }}">
或者也可以将此添加到您的表单中
<meta name="csrf-token" content="{{ csrf_token() }}" />
有关更多详细信息,请阅读。在
subcontroller.php中使用
use App\Subscriber;
阿贾克斯
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$("#subscribeform").submit(function (e) {
e.preventDefault();
var emailval = $('#subscriber').val();
console.log(emailval);
if(emailval !== "") {
$.ajax({
cache: false,
url: '/subscribing',
type: 'POST',
dataType: 'json',
data: {
_token: '{!! csrf_token() !!}',
email:emailval
},
success: function (data) {
console.log(data);
}
});
}
});
模型'Subscriber.php'
class Subscriber extends Model
{
protected $fillable = ['email'];
protected $table = 'subscriber';
}
并将以下代码添加到标题中:
<meta name="csrf-token" content="{{ csrf_token() }}">
谢谢。不管怎样,我把它改成了method,还是一样,有什么想法吗?:[嗯,我会确保POST请求确实发送到了正确的路由。请在DevTools网络选项卡中检查特定请求,也许您会注意到其中的一些内容?作为旁注,我不会查找与crsf令牌相关的内容(如其他人所建议的),因为它会抛出TokenMismatchException,not MethodNotAllowed。@StevenmcKevin情况并非如此,您可以使用type
来设置请求类型,它作为method
设置的别名记录在文档页面上。我完全按照这里所说的做了,仍然没有做任何事情。无论如何,谢谢您。请尝试替换url:'/subscribbing'
与url:'{{action('SubsController@store") }}“
MethodnotAllowedExpection在您尝试请求路由中定义的不同类型的路由时被抛出。因此,我猜测ajax可能是通过get方法请求的。您能分享google chrome开发人员请求的网络详细信息吗panel@OndOne,是否尝试将此参数添加到发送的数据中?type
和method
在jquery ajax中是相同的,type
是method
的别名版本。
<meta name="csrf-token" content="{{ csrf_token() }}">