লারাভেল - আজাক্সের অনুরোধ কিনা তা পরীক্ষা করুন


102

আমি লারাভেলে এজ্যাক্স কল নির্ধারণের জন্য কোনও উপায় অনুসন্ধান করার চেষ্টা করেছি তবে আমি এটি সম্পর্কিত কোনও দলিল পাই না।

আমার একটি index()ফাংশন রয়েছে যা আমি অনুরোধের প্রকৃতির উপর ভিত্তি করে পরিস্থিতিটিকে ভিন্নভাবে পরিচালনা করতে চাই। মূলত এটি একটি রিসোর্স নিয়ন্ত্রণকারী পদ্ধতি যা জিইটি অনুরোধের সাথে আবদ্ধ।

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

আমি পিএইচপি-তে অ্যাজাক্স অনুরোধটি নির্ধারণের অন্যান্য পদ্ধতিগুলি জানি তবে আমি লারাভেল সম্পর্কিত নির্দিষ্ট কিছু চাই।

ধন্যবাদ

আপডেট হয়েছে:

আমি ব্যবহার করার চেষ্টা করেছি

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

তবে আমি ত্রুটি পাচ্ছি: Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

শ্রেণিটি দেখায় যে এটি কোনও স্থির পদ্ধতি নয়।

উত্তর:


203

হতে পারে এটি সাহায্য করে। আপনাকে @ পরিমার রেফারেন্স দিতে হবে

         /**       
         * 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;আমার নিয়ামকদের নাম স্থান ব্যবহার করছি । ধন্যবাদ
রাহেল

4
আপনি প্রয়োজন হলে "অনুরোধ () ->
আজ্যাক্স

আমি 5.2 এ কাজ নিশ্চিত করতে পারি। আমি সাহায্যকারী ব্যবহার করি request()->ajax()ধন্যবাদ!
cbloss793

23

একটি এজাক্স অনুরোধ পরীক্ষা করতে আপনি ব্যবহার করতে পারেন if (Request::ajax())

দ্রষ্টব্য: আপনি লারাভেল 5 ব্যবহার করছেন তবে নিয়ামক প্রতিস্থাপন করুন

use Illuminate\Http\Request;

সঙ্গে

use Request; 

আমি আশা করি এটি কার্যকর হবে।


22

আপনি ভুল 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

$ অনুরোধ-> চায় জেসন ()

কাজ না $request->wantsJson()হলে আপনি চেষ্টা করতে পারেন$request->ajax()

$request->ajax() আপনার জাভাস্ক্রিপ্ট লাইব্রেরি যদি একটি এক্স-অনুরোধযুক্ত-এইচটিটিপি শিরোনাম সেট করে works

ডিফল্টরূপে লারাভেল এই শিরোনামটি js / bootstrap.js এ সেট করে

window.axios = require('axios');

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

আমার ক্ষেত্রে, আমি একটি ভিন্ন ফ্রন্টএন্ড কোড ব্যবহার করেছি এবং আমাকে এই শিরোনামটি নিজেই রেখে দিতে হয়েছিল $request->ajax() এবং কাজ করার রাখতে হয়েছিল।

তবে $request->wantsJson()শিরোনামের প্রয়োজন ছাড়াই অক্ষর ক্যোয়ারীটি পরীক্ষা করবে 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()) 

সঠিক উত্তর বলে মনে হচ্ছে। http://laravel.com/api/5.0/Illuminate/Http/Request.html# স্মৃতি_জ্যাক্স


4
আমি এটি নিশ্চিত কিনা তা নিশ্চিত নই তবে লারাভেল ফ্যাকাস ডিজাইনের প্যাটার্নটি ব্যবহার করে যাতে আপনার কলগুলি স্থির পদ্ধতির মতো করা যায়: laravel.com/docs/4.2/facades#facade-class-references সেই লিঙ্কটি একটি দেখায় ফ্যাকাদেস লারাভেল ব্যবহারের তালিকা। আপনি এটি একটি নিয়ামক ব্যবহার করছেন?
ম্যাথু ওয়ে

আমি ভুল ব্যবহারের বিবৃতি ব্যবহার করছিলাম। দুঃখিত তবে ফ্যাকাদেসের একটি ওভারভিউয়ের জন্য ধন্যবাদ :) এটি তথ্যবহুল।
রাহেল

6

অ্যাঙ্গুলারজেএস ফ্রন্ট- এন্ডের সাথে যারা কাজ করছেন তাদের পক্ষে এটি প্রত্যাশিত অ্যাজাক্স শিরোনাম লারাভেলটি ব্যবহার করে না। ( আরও পড়ুন )

অনুরোধটি ব্যবহার করুন :: অ্যাংুলারজেএস-এর জন্য চাই জেএসন () :

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

এটি এখনই উত্তর হওয়া উচিত
সালাল আসলাম

6

যারা লারাভেল হেল্পার ব্যবহার করতে পছন্দ করেন তারা লারাভেল হেল্পার ব্যবহার করে একটি অনুরোধ এজাক্স কিনা তা পরীক্ষা করে দেখতে পারেন request()

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

কখনও কখনও 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';}
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.