Laravel - periksa apakah permintaan Ajax


97

Saya telah mencoba menemukan cara untuk menentukan panggilan ajax di Laravel tetapi saya tidak menemukan dokumen apa pun tentangnya.

Saya memiliki index()fungsi yang ingin saya tangani secara berbeda berdasarkan sifat permintaan. Pada dasarnya ini adalah metode pengontrol sumber daya yang terikat ke permintaan GET.

public function index()
    {
        if(!$this->isLogin())
            return Redirect::to('login');

        if(isAjax()) // This is what i am needing.
        {
          return $JSON;
        }

        $data = array();
        $data['records'] = $this->table->fetchAll();

        $this->setLayout(compact('data'));
    }

Saya tahu metode lain untuk menentukan permintaan Ajax di PHP tetapi saya ingin sesuatu yang spesifik untuk Laravel.

Terima kasih

Diperbarui:

Saya mencoba menggunakan

 if(Request::ajax())
    {
        echo 'Ajax';
    }

Tetapi saya menerima kesalahan: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

Kelas tersebut menunjukkan bahwa ini bukan metode statis.

Jawaban:


192

Mungkin ini membantu. Anda harus merujuk @param

         /**       
         * Display a listing of the resource.
         *
         * @param  Illuminate\Http\Request $request
         * @return Response
         */
        public function index(Request $request)
        {
            if($request->ajax()){
                return "AJAX";
            }
            return "HTTP";
        }

Kamu benar. Ini akan berfungsi dalam kasus saya karena saya menggunakan namespace Illuminate\Http\Request;di pengontrol saya. Terima kasih
Raheel

1
Anda juga dapat menggunakan "request () -> ajax ()" jika diperlukan
badcom

Saya dapat mengonfirmasi bahwa ini berfungsi di 5.2. Saya menggunakan pembantu request()->ajax()Terima kasih!
cbloss793

22

Untuk memeriksa permintaan ajax, Anda dapat menggunakan if (Request::ajax())

Catatan: Jika Anda menggunakan laravel 5, maka di pengontrol ganti

use Illuminate\Http\Request;

dengan

use Request; 

Saya harap ini akan berhasil.


21

Anda menggunakan Requestkelas yang salah . Jika Anda ingin menggunakan Facade seperti: Request::ajax()Anda harus mengimpor kelas ini:

use Illuminate\Support\Facades\Request;

Dan tidak Illumiante\Http\Request


Solusi lain akan memasukkan instance dari kelas permintaan nyata:

public function index(Request $request){
    if($request->ajax()){
        return "AJAX";
    }

(Sekarang di sini Anda harus mengimpor Illuminate\Http\Request)


kamu benar. Saya memperbaikinya. Beberapa orang lain memberikan pernyataan penggunaan di atas dan saya tidak melihatnya. Terima kasih :)
Raheel

16

$ request-> wantJson ()

Anda dapat mencoba $request->wantsJson()jika $request->ajax()tidak berhasil

$request->ajax() berfungsi jika pustaka JavaScript Anda menyetel header X-Requested-With HTTP.

Secara default Laravel mengatur header ini di js / bootstrap.js

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

Dalam kasus saya, saya menggunakan kode frontend yang berbeda dan saya harus meletakkan tajuk ini secara manual $request->ajax()agar berfungsi.

Tetapi $request->wantsJson()akan memeriksa kueri axios tanpa perlu header X-Requested-With:

// Determine if the current request is asking for JSON. This checks Content-Type equals application/json.
$request->wantsJson()
// or 
\Request::wantsJson() // not \Illuminate\Http\Request

9
if(Request::ajax()) 

Sepertinya jawaban yang benar. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax


1
Saya tidak yakin apakah ini yang Anda maksud, tetapi Laravel memanfaatkan pola desain Fasad sehingga panggilan Anda dapat dilakukan seperti metode statis: laravel.com/docs/4.2/facades#facade-class-reference Tautan tersebut menunjukkan daftar Fasad yang digunakan Laravel. Apakah Anda menggunakannya di Controller?
Matthew Way

saya menggunakan pernyataan penggunaan yang salah. maaf Tapi terima kasih untuk gambaran umum Fasad :) Ini informatif.
Raheel


6

Mereka yang lebih suka menggunakan helper laravel, mereka dapat memeriksa apakah suatu permintaan adalah ajax menggunakan request()helper laravel .

if(request()->ajax())
   // code

2
public function index()
{
    if(!$this->isLogin())
        return Redirect::to('login');

    if(Request::ajax()) // This is check ajax request
    {
      return $JSON;
    }

    $data = array();
    $data['records'] = $this->table->fetchAll();

    $this->setLayout(compact('data'));
}

2

Terkadang Request::ajax()tidak berhasil, lalu gunakan\Request::ajax()


Ini tidak akan berfungsi jika namespace tidak digunakan. Anyways terima kasih
Raheel

0

setelah menulis kode jquery, lakukan validasi ini di rute Anda atau di pengontrol.

$.ajax({
url: "/id/edit",
data:
name:name,
method:'get',
success:function(data){
  console.log(data);}
});

Route::get('/', function(){
if(Request::ajax()){
  return 'it's ajax request';}
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.