Laravel - Ajax isteğini kontrol edin


102

Laravel'de ajax çağrısını belirlemenin bir yolunu bulmaya çalışıyordum ama bununla ilgili herhangi bir belge bulamadım.

Bir var index()ben farklı talebin niteliğine bağlı olarak sap duruma istediğiniz işlevi. Temel olarak bu, GET isteğine bağlı bir kaynak denetleyici yöntemidir.

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'));
    }

PHP'de Ajax isteğini belirlemenin diğer yöntemlerini biliyorum ama Laravel'e özgü bir şey istiyorum.

Teşekkürler

Güncellenmiş:

Kullanmayı denedim

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

Ama hata alıyorum: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

Sınıf, bunun statik bir yöntem olmadığını gösterir.

Yanıtlar:


202

Belki bu yardımcı olur. @Param'a başvurmalısınız

         /**       
         * 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";
        }

Haklısın. Bu, Illuminate\Http\Request;denetleyicilerimde ad alanını kullandığım için benim durumumda çalışacak . Teşekkürler
Raheel

1
Ayrıca gerekirse "request () -> ajax ()" kullanabilirsiniz
badcom

Bunun 5.2'de çalıştığını doğrulayabilirim. Yardımcısı kullandım request()->ajax()Teşekkürler!
cbloss793

23

Bir ajax isteğini kontrol etmek için kullanabilirsiniz if (Request::ajax())

Not: Laravel 5 kullanıyorsanız, kontrol cihazında

use Illuminate\Http\Request;

ile

use Request; 

Umarım işe yarar.


22

Yanlış Requestsınıfı kullanıyorsun . Cepheyi şu şekilde kullanmak istiyorsanız: Request::ajax()bu sınıfı içe aktarmanız gerekir:

use Illuminate\Support\Facades\Request;

Ve yok Illumiante\Http\Request


Başka bir çözüm, gerçek istek sınıfının bir örneğini enjekte etmektir:

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

(Şimdi buradan içeri aktarmanız gerekiyor Illuminate\Http\Request)


Haklısın. Bunu düzelttim. Başkası yukarıda bir kullanım ifadesi koydu ve ben buna bakmadım. Teşekkürler :)
Raheel

16

$ istek-> wantJson ()

Deneyebilirsin $request->wantsJson()eğer $request->ajax()işi değil

$request->ajax() JavaScript kitaplığınız bir X-Requested-With HTTP üstbilgisi ayarlarsa çalışır.

Laravel varsayılan olarak bu başlığı js / bootstrap.js'de ayarlayın

window.axios = require('axios');

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

Benim durumumda, farklı bir ön uç kodu kullandım ve bu başlığı $request->ajax()çalışmak için manuel olarak yerleştirmek zorunda kaldım .

Ancak $request->wantsJson(), başlığa ihtiyaç duymadan axios sorgusunu kontrol edecek 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

10
if(Request::ajax()) 

Doğru cevap gibi görünüyor. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax


1
Bunu kastettiğinizden emin değilim, ancak Laravel Cephe tasarım modelini kullanır, böylece çağrılarınız statik yöntemler gibi yapılabilir: laravel.com/docs/4.2/facades#facade-class-reference Bu bağlantı bir Laravel'in kullandığı Cepheler listesi. Bir Kontrolörde mi kullanıyorsunuz?
Matthew Way

yanlış kullanım ifadesi kullanıyordum. üzgünüm Ama Cephelere genel bir bakış için teşekkürler :) Bu bilgilendirici.
Raheel


6

Laravel yardımcılarını kullanmayı tercih edenler, laravel request()yardımcı kullanarak bir isteğin ajax olup olmadığını kontrol edebilirler .

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

3
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'));
}

3

Bazen Request::ajax()işe yaramıyor, sonra kullan\Request::ajax()


Ad alanı kullanılmazsa çalışmaz. Her neyse teşekkürler
Raheel

0

jquery kodunu yazdıktan sonra bu doğrulamayı rotanızda veya denetleyicide gerçekleştirin.

$.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';}
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.