लारवेल - यदि अजाक्स अनुरोध करता है तो जांच करें


95

मैं लारवेल में अजाक्स कॉल को निर्धारित करने का एक तरीका खोजने की कोशिश कर रहा हूं, लेकिन मुझे इसके बारे में कोई दस्तावेज नहीं मिला है।

मेरे पास एक index()फ़ंक्शन है जो मैं अनुरोध की प्रकृति के आधार पर स्थिति को अलग तरह से संभालना चाहता हूं। मूल रूप से यह एक संसाधन नियंत्रक विधि है जो 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'));
    }

मैं PHP में अजाक्स अनुरोध का निर्धारण करने के अन्य तरीकों को जानता हूं, लेकिन मैं लारवेल के लिए कुछ विशिष्ट चाहता हूं।

धन्यवाद

अपडेट किया गया:

मैंने प्रयोग करने की कोशिश की

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

लेकिन मुझे त्रुटि मिल रही है: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

वर्ग दर्शाता है कि यह एक स्थिर विधि नहीं है।

जवाबों:


190

शायद यह मदद करता है। आपको @ अप्राम का उल्लेख करना होगा

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

तुम सही हो। यह मेरे मामले में काम करेगा क्योंकि मैं Illuminate\Http\Request;अपने नियंत्रकों के नाम स्थान का उपयोग कर रहा हूं। धन्यवाद
राहील

1
आप जरूरत पड़ने पर "अनुरोध () -> अजाक्स ()" का भी उपयोग कर सकते हैं
बैडकॉम

मैं 5.2 में इस काम की पुष्टि कर सकता हूं। मैंने सहायक का उपयोग किया request()->ajax()धन्यवाद!
cbloss793

22

अजाक्स अनुरोध की जांच करने के लिए आप उपयोग कर सकते हैं if (Request::ajax())

नोट: यदि आप लार्वा 5 का उपयोग कर रहे हैं, तो नियंत्रक में बदलें

use Illuminate\Http\Request;

साथ में

use Request; 

मुझे उम्मीद है कि यह काम करेगा।


20

आप गलत Requestवर्ग का उपयोग कर रहे हैं । यदि आप मुखौटा का उपयोग करना चाहते हैं जैसे: Request::ajax()आपको इस वर्ग को आयात करना होगा:

use Illuminate\Support\Facades\Request;

और नहीं Illumiante\Http\Request


एक अन्य समाधान वास्तविक अनुरोध वर्ग के एक उदाहरण को इंजेक्ट किया जाएगा:

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

(अब यहाँ आपको आयात करना है Illuminate\Http\Request)


तुम सही हो। मैंने तय किया कि कुछ अन्य लड़के ने ऊपर एक उपयोग वक्तव्य दिया और मैंने उस पर गौर नहीं किया। धन्यवाद :)
राहील

16

$ अनुरोध> wantsJson ()

यदि आप काम नहीं करते हैं, $request->wantsJson()तो आप कोशिश कर सकते $request->ajax()हैं

$request->ajax() अगर आपकी जावास्क्रिप्ट लाइब्रेरी एक्स-रिक्वेस्ट-विथ HTTP हेडर सेट करती है तो।

डिफ़ॉल्ट रूप से लारवेल ने इस हेडर को js / bootstrap.js में सेट किया है

window.axios = require('axios');

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

मेरे मामले में, मैंने एक अलग फ्रंटेंड कोड का उपयोग किया और मुझे $request->ajax()काम करने के लिए इस हेडर को मैन्युअल रूप से डालना था ।

लेकिन $request->wantsJson()हेडर की आवश्यकता के बिना axios क्वेरी की जाँच करेंगे 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()) 

सही उत्तर लगता है। http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax


1
मैं कर रहा हूँ नहीं यकीन है कि अगर यह तुम क्या मतलब है, लेकिन Laravel फसाड डिज़ाइन पैटर्न तो अपने कॉल स्थिर तरीकों की तरह बनाया जा सकता है कि का उपयोग करता है: laravel.com/docs/4.2/facades#facade-class-reference वह लिंक से पता चलता है एक facades लारवेल का उपयोग करता है की सूची। क्या आप इसे एक नियंत्रक में उपयोग कर रहे हैं?
मैथ्यू वे

मैं गलत उपयोग कथन का उपयोग कर रहा था। क्षमा करें, लेकिन facades के अवलोकन के लिए धन्यवाद :) यह जानकारीपूर्ण है।
राहील

6

AngularJS फ्रंट-एंड के साथ काम करने वालों के लिए , यह अजाक्स हेडर का उपयोग नहीं करता है लार्वा उम्मीद कर रहा है। (और पढ़ें )

अनुरोध का उपयोग करें : wantJson () AngularJS के लिए:

if(Request::wantsJson()) { 
    // Client wants JSON returned 
}

अब इसका उत्तर होना चाहिए
सलाल असलम

6

जो लोग लारवेल हेल्पर्स का उपयोग करना पसंद करते हैं, वे जांच कर सकते हैं कि क्या एक अनुरोध लार्वा request()हेल्पर का उपयोग करने वाला अजाक्स है ।

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

कभी-कभी Request::ajax()काम नहीं करता है, तो उपयोग करें\Request::ajax()


यदि नाम स्थान का उपयोग नहीं किया जाता है तो यह काम नहीं करेगा। वैसे भी धन्यवाद
रहेल

0

jquery कोड लिखने के बाद इस मान्यता को अपने मार्ग या नियंत्रक में निष्पादित करें।

$.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';}
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.