gpt4 book ai didi

jquery - Laravel 4 CSRF表单通过Ajax调用提交

转载 作者:行者123 更新时间:2023-12-03 22:00:37 26 4
gpt4 key购买 nike

我是 Stackoverflow 和 Laravel 4 的新手,我正在尝试通过 jquery ajax 提交表单。我序列化Array()表单并使用json来提交它。在 Laravel 中,在路由中我检查提交的 csrf token ,然后转到我的 Controller 以获取流程输入。当 _token 输入位于数组中时,csrf 检查不起作用,就像使用 serializeArray() 一样。我必须获取 _token 值并作为单独的 ajax 数据提交。我想知道是否有一种方法可以告诉 csrf 过滤器在哪里运行以检查输入数组中的 hte 字段 _token 并使用它?这是我的代码:

路由.php

Route::post('searchAjax', array('before' => 'csrf', 
'uses' => 'SearchController@searchAjax'));

这是我不希望它读取数组形式[0]['_token]的地方,但我不知道如何告诉它这样做。

index.js
var form = $('#search').serializeArray();
var token = $('#search > input[name="_token"]').val();
$.ajax({
type: 'post',
url: 'searchAjax',
dataType: 'json',
data: { _token: token, form: form },
success: function(data) {
for(var key in data)
{
//alert(key)
}
//alert(data.message);
}
});

我想在ajax调用中去掉{_token: token, form: form},而只拥有“form”,它是一个已经包含_token的数组。这是 HTML:

<form id="search" class="form-horizontal" accept-charset="UTF-8" action="http://testing:998/search" method="POST">
<input type="hidden" value="6GBbv9LmnOdL8UcOsm8DDJ4Bfi6eGcQRlC9SPdL4" name="_token">
<div class="control-group">
<label class="control-label" for="title">Book Titles</label>
<div class="controls">
<input id="title" class="input" type="text" value="click to search book titles" name="title">
</div>
</div>
<div class="control-group">
<div class="control-group">
<div class="control-group">
</form>

提前谢谢您。 :)

最佳答案

另一种选择是使用 Kelt Dockins 概述的方法,即使用 jquery 在 header 中发送 token ,例如。在您的 jquery/javascript Bootstrap 中的某处添加:

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

这将从 header 元数据标记中获取 CSRF token ,并将其包含在每个 ajax 请求的 header 中。然后您需要将元数据和 token 添加到 Laravel 模板中,例如。

<head>
<title>My Page</title>
<meta name="csrf-token" content="<?= csrf_token() ?>">

您还需要修改 CSRF 过滤器以检查 ajax 请求 header 以及默认的 Input::get('_token')

Route::filter('csrf', function()

{
$token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
if (Session::token() != $token) {
throw new Illuminate\Session\TokenMismatchException;
}
});

关于jquery - Laravel 4 CSRF表单通过Ajax调用提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20444236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com