এজ্যাক্স অনুরোধে একটি পুনর্নির্দেশ সনাক্ত করা হচ্ছে?


94

আমি ইউআরএল পেতে jQuery ব্যবহার করতে চাই এবং এটি স্পষ্টভাবে পরীক্ষা করতে চাই যে এটি 302 পুনর্নির্দেশের সাথে প্রতিক্রিয়া করেছে কিনা, তবে পুনর্নির্দেশটি অনুসরণ করে না

jQuery এর $.ajaxসর্বদা পুনঃনির্দেশগুলি অনুসরণ করে। আমি কীভাবে এটি প্রতিরোধ করতে পারি এবং এটি অনুসরণ না করে পুনঃনির্দেশ দেখতে পারি?

"জ্যাকোরি অ্যাজ্যাক্স পুনর্নির্দেশ" এর মতো শিরোনাম সহ বিভিন্ন প্রশ্ন রয়েছে তবে সেগুলি কেবল কোনও সার্ভারের যে স্ট্যাটাস দেয় তার সরাসরি পরীক্ষা না করে বরং আরও কিছু লক্ষ্য অর্জনে জড়িত বলে মনে হয়।


আমার বিশেষ ক্ষেত্রে, আমি লগইন পৃষ্ঠায় পুনর্নির্দেশ থাকলে সাফল্য এবং এইচটিএমএল প্রতিক্রিয়া সম্পর্কে JSON প্রতিক্রিয়া আশা করি । আমি পরীক্ষা করে শেষ পর্যন্ত xhr.getResponseHeader("content-type")দিয়ে শুরু হয় text/htmlএবং "লগইন" হিসাবে একটি শব্দ যেমন রয়েছে এবং দেন একটি প্রয়োজনে "আপনার সেশনের সময় শেষ হয়েছে"। এটি অবশ্যই কোনও উত্তর নয়, বরং একটি কর্মচঞ্চল।
সালমান এ

উত্তর:


87

AJAX অনুরোধের পুনর্নির্দেশ অনুসরণ না করার সুযোগ কখনই নেই (যেমন, এটি অবশ্যই পুনঃনির্দেশকে অনুসরণ করবে)। এই উত্তর https://stackoverflow.com/a/2573589/965648 এ আরও তথ্য পাওয়া যাবে


41

ভবিষ্যতে আপনাকে স্বাগতম!

এই মুহূর্তে আমাদের কাছে এক্সএইচআর অবজেক্ট থেকে একটি "প্রতিক্রিয়া URL" সম্পত্তি রয়েছে। হ্যাঁ!

দেখুন কিভাবে XMLHttpRequest- এর প্রতিক্রিয়া URL পান কিভাবে?

তবে, jQuery (কমপক্ষে 1.7.1) সরাসরি এক্সএমএলএইচটিপিআরকোয়েস্ট অবজেক্টে অ্যাক্সেস দেয় না। আপনি এর মতো কিছু ব্যবহার করতে পারেন:

var xhr;
var _orgAjax = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
  xhr = _orgAjax();
  return xhr;
};

jQuery.ajax('http://test.com', {
  success: function(responseText) {
    console.log('responseURL:', xhr.responseURL, 'responseText:', responseText);
  }
});

এটি কোনও পরিষ্কার সমাধান নয় এবং আমি মনে করি jQuery টিম ভবিষ্যতের প্রকাশগুলিতে প্রতিক্রিয়া URL এর জন্য কিছু তৈরি করবে।

টিআইপি : প্রতিক্রিয়া ইউআরএল দিয়ে কেবল মূল URL টি তুলনা করুন। যদি এটি সমান হয় তবে কোনও পুনর্নির্দেশ দেওয়া হয়নি। যদি এটি "অপরিজ্ঞাত" থাকে তবে প্রতিক্রিয়া ইউআরএল সম্ভবত সমর্থিত নয়। তবে নিক গারভে যেমন বলেছিলেন, এজ্যাক অনুরোধে পুনর্নির্দেশের অনুসরণ না করার সুযোগ কখনই পাওয়া যায় না তবে আপনি প্রতিক্রিয়াউত্তর সম্পত্তি ব্যবহার করে বেশ কয়েকটি কাজ সমাধান করতে পারেন ।


4
এই বৈশিষ্ট্যটিতে আরও কিছু সংস্থান যুক্ত করতে - এক্সএইচআর.অগ্রহানসিআরএল - তে এমডিএন পৃষ্ঠা - সাধারণ সমর্থন এমএসআইইয়ের জন্য অপেক্ষা করছে বলে মনে হচ্ছে, এটি কেবল এজ / 14 এ যুক্ত করেছে।
এলি কলিন্স

ধন্যবাদ! খুব দরকারী
গৌটিয়ার

আমি দেখতে পেয়েছি যে এই কোডটি আসলে $ .জ্যাক্স তৈরি করে ({url: 'someurl', xhrFields: red withCredentials: সত্য}}) ইন্টারনেট এক্সপ্লোরারে একটি ত্রুটি ফেলে কারণ _orgAjax ফাংশনটি 'এই' পরিবর্তনশীলটিকে $ .জ্যাক্সসেটেটিংয়ের সমাধানের উপর নির্ভর করে অবজেক্ট যখন এটি হয় না, jQuery একটি XMLHttpRequest অবজেক্টের পরিবর্তে একটি অ্যাক্টিভ এক্স IXMLHTTPRequest অবজেক্ট তৈরি করে, যা ক্রেনডেনশিয়াল সম্পত্তি সমর্থন করে না। আমি xhr = _orgAjax.call (a। এজ্যাক্সেটেটিং) কল করে এটি ঠিক করেছি; xhr এর পরিবর্তে = _orgAjax (); আমি আশা করি এটা কারো সাহায্যে লাগবে.
স্টিফেনকেসি

11

অন্যান্য লোকেরা যারা এই প্রশ্নের জবাব দিয়েছেন তারা (দুঃখের সাথে) সঠিক যে এই তথ্যটি ব্রাউজারের মাধ্যমে আমাদের দ্বারা গোপন করা হয়েছে, আমি ভেবেছিলাম যে আমি একটি কাজ পোস্ট করব যা নিয়ে এসেছি:

আমি আমার সার্ভার অ্যাপ্লিকেশনটিকে একটি কাস্টম প্রতিক্রিয়া শিরোনাম ( X-Response-Url) অনুরোধ করা ইউআরএল সমন্বিত হেডার সেট করতে কনফিগার করেছি । যখনই আমার এজাক্স কোডটি কোনও প্রতিক্রিয়া পেয়েছে, এটি xhr.getResponseHeader("x-response-url")সংজ্ঞায়িত কিনা তা পরীক্ষা করে , কোন ক্ষেত্রে এটির সাথে এটি মূলত অনুরোধ করা url এর সাথে তুলনা করে $.ajax()। যদি স্ট্রিংগুলি পৃথক হয়, আমি জানি যে একটি পুনর্নির্দেশ ছিল এবং অতিরিক্তভাবে আমরা কী ইউআরএল এসেছি।

এটিতে কিছু সার্ভার-সাইড সাহায্যের প্রয়োজনের ত্রুটি রয়েছে এবং রাউন্ড ট্রিপ চলাকালীন ইউআরএলটি মুং হয়ে গেলে (সমস্যাগুলি উদ্ধৃতি / এনকোডিং ইত্যাদির কারণে) ভেঙে যেতে পারে ... তবে 99% ক্ষেত্রে এটি পাওয়া যায় বলে মনে হয় কাজ শেষ


সার্ভারের দিকে, আমার নির্দিষ্ট কেসটি পিরামিড ওয়েব কাঠামো ব্যবহার করে একটি অজগর অ্যাপ্লিকেশন ছিল এবং আমি নিম্নলিখিত স্নিপেট ব্যবহার করেছি:

import pyramid.events

@pyramid.events.subscriber(pyramid.events.NewResponse)
def set_response_header(event):
    request = event.request
    if request.is_xhr:
        event.response.headers['X-Response-URL'] = request.url

এটি সত্য যে এটি না নিয়ে পুনর্নির্দেশ আছে কিনা তা জানার উপায় নেই; তবে প্রত্যাশিত শিরোনাম URL টি পুনঃনির্দেশিত কারও সাথে তুলনা করা এই মুহুর্তে আমার পক্ষে কার্যকর হতে পারে। ধারণার জন্য ধন্যবাদ
সেরজিও এ।

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