2016-01-03 53 views
0

我们如何在Laravel 5.2中检查请求是否是有效的ajax请求。在codeigniter中,我们可以像$ this-> input-> is_ajax_request()那样检查它。难道,Laravel 5.2有类似的东西吗?laravel 5.2有效的ajax请求

此外,我想知道我们如何验证对csrf令牌的请求。如果我让我的网页通过'web'中间件生成一个csrf令牌,然后将此令牌作为ajax请求参数传递,那么这样做不错吗? Laravel会考虑验证令牌吗?或者有其他解决方法吗?

我检查了laravel 5.2文档,并且由于这是我第一次处理laravel框架,所以文档假定读者已经熟悉了早期版本的框架。对于像我这样的新来者来说,这是一点压倒性的。

在此先感谢。请让我知道你是否需要更多的投入。

Prakhar

回答

7

我认为这可能会帮助您在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” 作为选择输入并使用其中令牌作为隐藏输入传递的样式/ html包。

0

我们如何能为您在Laravel 5.2如果请求是有效的Ajax请求。在codeigniter中,我们可以像$ this-> input-> is_ajax_request()那样检查它。难道,Laravel 5.2有类似的东西吗?

Request类有an ajax() function,所以$request->ajax()Request::ajax()(取决于你如何让你的控制器请求)会做的伎俩。

此外,我想知道我们如何验证对csrf令牌的请求。如果我让我的网页通过'web'中间件生成一个csrf令牌,然后将此令牌作为ajax请求参数传递,那么这样做不错吗? Laravel会考虑验证令牌吗?或者有其他解决方法吗?

是的,传递带有AJAX调用的令牌并确保您的路由具有CSRF中间件(尝试没有令牌的请求 - 它应该会引发错误)。示例是在这个文档中:https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

+0

感谢您的输入伴侣。我进一步检查了文档,可以找到更多关于$ request-> ajax()函数的信息。 – Prakhar

+0

@Prakhar并非所有内容都包含在文档中,它们旨在涵盖最常用的部分。有时你必须查看API文档。 – ceejayoz

2

在Laravel 5。2(我希望任何的身体从这个代码阿贾克斯获得帮助)函数

获取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; 
0

无论何时,当您在应用程序中定义一个HTML表单时,都应在表单中包含一个隐藏的CSRF令牌字段,以便CSRF保护中间件能够验证该请求。

为了产生含有CSRF令牌的隐藏的输入字段_token,你可以使用csrf_field辅助函数:

所以使用AJAX请求与POST方法时,需要使用Ajax数据一起传递隐藏CSRF令牌字段:

<script> 

var token="<?php echo csrf_token(); ?>"; 

$.ajax({ 

    url:url, 
    method:'POST', 
    data:{ 
    '_token':token, 
    'id':1  
    } 


}) 

</script>