2016-01-03 74 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>