অনুরোধটি এজেএক্স ছিল কিনা তা সনাক্ত করুন ails


128

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

আমি এরকম কিছু করতে চাই:

def action
   @model = Model.find(params[:id])

   respond_to do |format|

      if (wasAJAXRequest()) #How do I do this?

         format.html #action.html.erb

      else

         format.html {redirect_to root_url}
   end
end

উত্তর:


249

header[X-Requested-With]এটি কোনও এজ্যাক্স অনুরোধ কিনা তা দেখতে আপনি এটি পরীক্ষা করতে পারেন। এটি কীভাবে করা যায় সে সম্পর্কে একটি ভাল নিবন্ধ এখানে ।

এখানে একটি উদাহরণ:

if request.xhr?
  # respond to Ajax request
else
  # respond to normal request
end

সতর্কতা: remote: trueপ্রয়োজনীয় নতুন শিরোনাম সেট না হওয়ায় এটি নতুন রেল সংস্করণগুলিতে স্ট্যান্ডার্ড কলগুলিতে কাজ করে না ।
রোল্যান্ড স্টাডার

14

আপনি যদি :remote => trueআপনার লিঙ্ক বা ফর্মগুলি ব্যবহার করে থাকেন তবে আপনি যা করতে পারেন:

respond_to do |format|
  format.js { #Do some stuff }

আপনি কল করে রেসপন্স_ ব্লকের আগেও পরীক্ষা করতে পারেন request.xhr?


26
একটি এজাক্স অনুরোধটি জাভাস্ক্রিপ্টের সাথে জবাব দেওয়ার দরকার নেই, $.ajax({dataType: 'html'})এটি এইজ্যাক্স যা এইচটিএমএলের সাথে প্রতিক্রিয়া জানায়। এটি করার সঠিক request.xhr?
উপায়টি,

3

দস্তাবেজরা এই অনুরোধটি বলে? Xhr?

Returns true if the X-Requested-With header contains XMLHttpRequest”....

কিন্তু এটি সাবধান

request.xhr? 

ডকস হিসাবে = ~ অনুসারে, বুলেইন মানগুলিতে সংখ্যা বা শূন্য মানগুলি প্রদান করে না ~

irb(main):004:0> /hay/ =~ 'haystack'
=> 0
irb(main):006:0> /stack/ =~ 'haystack'
=> 3
irb(main):005:0> /asfd/ =~ 'haystack'
=> nil

এটি এর উপর ভিত্তি করে:

# File actionpack/lib/action_dispatch/http/request.rb, line 220
def xml_http_request?
  @env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/
end

সুতরাং

env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/  => 0

দস্তাবেজগুলি:

http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F


সত্য এবং বুলিয়ান মধ্যে পার্থক্য কি? দুজনেই কি সত্য / মিথ্যা নয়?
আর্নল্ড রোয়া

সত্যিকারের অর্থ যে যখন "বুলিয়ান" প্রসঙ্গে ব্যবহৃত হয়, তখন আপনি তাদের বুলেটিয়ান হিসাবে নয়, বরং যেগুলিকে বুল করা হবে হিসাবে বিবেচনা করতে হবে। এনভির উপরে ['HTTP_X_REQUESTED_WITH'] = ~ / এক্সএমএল এইচটিপিআরকোয়েস্ট / প্রত্যাবর্তন 0 টি মিথ্যা নয়। এবং 0 আসলে সত্যবাদী, রুবিতে মিথ্যা নয়: 0 || 1 => 0 তবে আমি স্পষ্টতার জন্য আমার পোস্টটি পরিবর্তন করতে চলেছি।
পিক্সিলিথ

তবে এটির সত্যতা সত্য নয়, শূন্যের অর্থ হ'ল পাঠ্যটি সূচক 0-এ পাওয়া গেছে, সুতরাং এটি খুঁজে পাওয়া (এবং এর এবং এজাক্স অনুরোধ)। যদি পাঠ্য না পাওয়া যায় তবে ফলাফলটি nilমিথ্যা।
আর্নল্ড রোয়া

2
হ্যাঁ, তবে কনভেনশনটি সাধারণত পদ্ধতি_নামের জন্য? বোল ফিরিয়ে আনতে, সুতরাং এটি একটি
গ্যাচা

0

আমি before_actionফিল্টার ব্যবহার করতে পছন্দ করি যখন আপনার একাধিক ক্রিয়াকলাপের জন্য একই ফিল্টার / অনুমোদনের প্রয়োজন হয় তখন তারা বিশেষত দুর্দান্ত হয়।

class MyController < AuthController
  before_action :require_xhr_request, only: [:action, :action_2]

  def action
    @model = Model.find(params[:id])
  end

  def action_2
    # load resource(s)
  end

  private

  def require_xhr_request
    redirect_to(root_url) unless request.xhr?
  end
end

0
request.xhr? 

যদি এই রিটার্ন 0 হয় তবে এর অর্থ এটি একটি এজাক্স অনুরোধ, অন্যথায় এটি শূন্য হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.