如果请求是有效的ajax请求,我们如何在Laravel 5.2中进行检查。在codeigniter中,我们可以像$this->input->is_ajax_request()那样检查它。Laravel 5.2有类似的东西吗?
此外,我想知道我们如何验证csrf令牌的请求。如果我让我的网页通过"web"中间件渲染,生成一个csrf令牌,然后将该令牌作为ajax请求参数传递,这可以吗?Laravel会负责验证代币吗?或者有其他方法吗?
我已经查看了laravel 5.2文档,由于这是我第一次处理laravel框架,文档似乎假设读者已经熟悉了该框架的早期版本。对于像我这样的新人来说,这有点让人不知所措。
提前谢谢。如果你需要我的更多输入,请告诉我。
Prakhar
我认为这可能会帮助您取消对Laravel使用AJAX的一种非常基本的方法。
这是一段非常古老的代码,但它能工作jajajaja
控制器侧:
/**
* @param Request $request
* @return 'Illuminate'Http'JsonResponse
*/
public function getRamos(Request $request)
{
$check = Ramo::find($request->input('ramo'));
$subramos = Subramo::where('ramo_id', $check->id)->get(['nombre_subramo']);
if($request->ajax()){
return response()->json([
'subramos' => $subramos
]);
}
}
在前面:
<script>
$(document).ready(function(){
$('#ramo').change(function(){
var ramo, token, url, data;
token = $('input[name=_token]').val();
ramo = $('#ramo').val();
url = '{{route('getRamos')}}';
data = {ramo: ramo};
$('#subramos').empty();
$.ajax({
url: url,
headers: {'X-CSRF-TOKEN': token},
data: data,
type: 'POST',
datatype: 'JSON',
success: function (resp) {
$.each(resp.subramos, function (key, value) {
$('#subramos').append('<option>'+ value.nombre_subramo +'</option>');
});
}
});
});
});
</script>
考虑将"#ramo"作为选择输入,并使用style/html包,其中令牌作为隐藏输入传递。
在Laravel 5.2中(我希望任何人都能从Ajax的代码中获得帮助)
在函数中获取ajax请求,下面是两个函数示例:
的第一个例子
public function getLev() {
if (!Request::ajax())
return false;
$result = Input::all();
$lev_id = (int) $result['lev_id'];
$invoiceid = (int) $result['invoiceid'];
return SuppliersController::getLev($invoiceid,$lev_id);//you can do any thing with your variables
//function is working in my case, you case take idea from this function
}
第二示例
public function deleteInvoice() {
if (Request::ajax()) {
$data = Input::all();
return delete_invoice($data['invoice_id'], $data['reason_text']);//you can do any thing with your variables
}
return false;
//function is working in my case, you case take idea from this function
}
在页面/控制器的顶部包含这些文件,您可以在其中编写ajax相关函数:
use Illuminate'Support'Facades'Input;
use Illuminate'Support'Facades'Request;
如果请求是有效的ajax请求,我们如何在Laravel 5.2中进行检查。在codeigniter中,我们可以像$this->input->is_ajax_request()那样检查它。Laravel 5.2有类似的东西吗?
Request类有一个ajax()
函数,所以$request->ajax()
或Request::ajax()
(取决于您在控制器中获取请求的方式)会起作用。
此外,我想知道我们如何验证csrf令牌的请求。如果我让我的网页通过"web"中间件渲染,生成一个csrf令牌,然后将该令牌作为ajax请求参数传递,这可以吗?Laravel会负责验证代币吗?或者有其他方法吗?
是的,通过AJAX调用传递令牌,并确保您的路由具有CSRF中间件(尝试一个没有令牌的请求,它应该会抛出一个错误)。文档中的示例如下:https://laravel.com/docs/5.2/routing#csrf-x-csrf-token
在应用程序中定义HTML表单时,应在表单中包含一个隐藏的CSRF令牌字段,以便CSRF保护中间件能够验证请求。
要生成包含CSRF令牌的隐藏输入字段_token,可以使用CSRF_field辅助函数:
因此,要使用带有POST方法的AJAX请求,您需要将隐藏的CSRF令牌字段与AJAX数据一起传递:
<script>
var token="<?php echo csrf_token(); ?>";
$.ajax({
url:url,
method:'POST',
data:{
'_token':token,
'id':1
}
})
</script>