বিভিন্ন জেএস লাইব্রেরি দ্বারা করা সমস্ত এজেএক্স অনুরোধগুলি কীভাবে আটকাবেন


110

আমি বিভিন্ন জেএস লাইব্রেরি (অ্যাঙ্গুলারজেএস, ওপেনলায়ার্স, ...) দিয়ে একটি ওয়েব অ্যাপ তৈরি করছি এবং লগ-ইন ব্যবহারকারীর সেশনটির মেয়াদ শেষ হয়ে গেলে (প্রতিক্রিয়াটি 401 Unauthorizedস্ট্যাটাসের সাথে ফিরে আসে ), তাকে পুনঃনির্দেশ করার জন্য , সমস্ত এজেএক্স প্রতিক্রিয়াগুলি সক্ষম হওয়ার জন্য একটি উপায়ের প্রয়োজন লগইন পৃষ্ঠায়।

আমি জানি অ্যাংুলারজেএস এই interceptorsজাতীয় পরিস্থিতি পরিচালনা করার প্রস্তাব দেয় তবে ওপেনলায়ার্স অনুরোধগুলিতে এই জাতীয় ইনজেকশন অর্জনের কোনও উপায় খুঁজে পেল না। সুতরাং আমি একটি ভ্যানিলা জেএস পদ্ধতির পক্ষে বেছে নিয়েছি।

এখানে আমি কোডটির এই অংশটি পেয়েছি ...

(function(open) {

    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {

        this.addEventListener("readystatechange", function() {
            console.log(this.readyState); // this one I changed
        }, false);

        open.call(this, method, url, async, user, pass);
    };

})(XMLHttpRequest.prototype.open);

... যা আমি রূপান্তর করেছি এবং দেখে মনে হচ্ছে এটি প্রত্যাশার সাথে আচরণ করে (এটি কেবলমাত্র শেষ গুগল ক্রোমে পরীক্ষিত)।

এটি এক্সএমএলএইচটিপিআরকিউস্টের প্রোটোটাইপটি সংশোধন করার সাথে সাথে আমি ভাবছি যে এটি কতটা বিপজ্জনক হতে পারে বা এটি যদি গুরুতর পারফরম্যান্সের সমস্যা তৈরি করতে পারে। এবং উপায় দ্বারা কোনও বৈধ বিকল্প আছে?

আপডেট: কীভাবে অনুরোধগুলি প্রেরণের আগে তাদেরকে আটকানো যায়

আগের কৌশলটি ঠিকঠাক কাজ করে। তবে যদি একই পরিস্থিতিতে আপনি অনুরোধটি প্রেরণের আগে কিছু শিরোনাম ইনজেকশন করতে চান? নিম্নলিখিতগুলি করুন:

(function(send) {

    XMLHttpRequest.prototype.send = function(data) {

        // in this case I'm injecting an access token (eg. accessToken) in the request headers before it gets sent
        if(accessToken) this.setRequestHeader('x-access-token', accessToken);

        send.call(this, data);
    };

})(XMLHttpRequest.prototype.send);

4
আমার কাছে পুরোপুরি নিরাপদ বলে মনে হচ্ছে।
বার্মার

পারফরম্যান্সের একমাত্র প্রভাবটি হ'ল এটি প্রতিটি এজেএক্স প্রতিক্রিয়া চলাকালীন একটি অতিরিক্ত ফাংশন চালাবে, তবে আপনি যা করতে চান তা।
বার্মার

আমি ভালো কিছু খুঁজছিলাম. অনেক অনেক ধন্যবাদ
রূপা চাঁদ

উত্তর:


36

এই জাতীয় ফাংশন হুকিং পুরোপুরি নিরাপদ এবং অন্যান্য কারণে নিয়মিতভাবে অন্যান্য পদ্ধতিতে করা হয়।

এবং কেবলমাত্র পারফরম্যান্স ইফেক্টটি হ'ল প্রতিটি .open()প্লাসের জন্য কেবলমাত্র একটি অতিরিক্ত ফাংশন কল যা আপনি নিজেরাই চালান যা কিছু কোড যা সম্ভবত কোনও নেটওয়ার্কিং কল জড়িত থাকার সময় অবিরাম terial


আইই তে, এটি এমন কোনও কোড ধরবে না ActiveXObjectযা অ্যাজাক্স করার নিয়ন্ত্রণ পদ্ধতিটি ব্যবহার করার চেষ্টা করে । ওয়েল প্রথম লিখিত কোড সৌন্দর্য XMLHttpRequestবস্তু এবং যে ব্যবহারগুলি যদি পাওয়া যায় এবং যে ইন্টারনেট 7. যেহেতু প্রাপ্তিসাধ্য করা হয়েছে কিন্তু, কিছু কোড ব্যবহার করে হতে পারে ActiveXObjectপদ্ধতি যদি এটি উপলব্ধ যা অর্থাত্ অনেক পরে সংস্করণ মাধ্যমে সত্য হবে না।


আধুনিক ব্রাউজারগুলিতে, fetch()ইন্টারফেসের মতো অ্যাজাক্স কলগুলি ইস্যু করার অন্যান্য উপায় রয়েছে তাই যদি কেউ সমস্ত অ্যাজাক্স কল হুক করে দেখছে তবে আপনাকে ঠিক চেয়ে বেশি হুক করতে হবে XMLHttpRequest


1
হাই @ jfriend00 - - কেমন আছেন সবাই API অনুরোধ আনা হুক হবে stackoverflow.com/questions/44728723/... ?
কোলেমারিক

1
@ ব্যাগোফকোলে - fetch()সমস্ত কলকে আটকানোর জন্য আপনি সম্ভবত ফাংশনটি বানর-প্যাচ করতে পারেন - যদিও আমি নিজে কখনও চেষ্টা করি নি। দেখে মনে হচ্ছে এই মডিউলটি এটি করে।
jفر00

comment_service_ajaxঅনুরোধগুলি হুক করার চেষ্টা করার সময় ইউটিউবকে ভেঙে দেয়।
লিয়ারয়

3

এটি IE এর কিছু সংস্করণ (9 এবং নীচে) এর এক্সএমএলএইচটিপিআরেক্টসগুলি ধরবে না । লাইব্রেরির উপর নির্ভর করে, তারা প্রথমে IE এর মালিকানাধীন অ্যাক্টিভ এক্স নিয়ন্ত্রণের সন্ধান করতে পারে।

এবং, অবশ্যই, আপনি যদি IE এর অধীনে একটি কঠোর ডক্টইপিকে ব্যবহার করেন তবে সমস্ত বেট বন্ধ রয়েছে তবে আমি নিশ্চিত যে আপনি এটি জানতেন।

তথ্যসূত্র: CanIuse


2

ফায়ারফক্স এএমও সম্পাদক দ্বারা যে দয়া করে নির্দেশ করেছেন Rob W,

নিম্নলিখিত কোডটি XMLHttpRequest এর আচরণ পরিবর্তন করে। ডিফল্টরূপে, যদি তৃতীয় ("async") প্যারামিটার নির্দিষ্ট না করা থাকে তবে এটি ডিফল্ট হয়। এটি নির্দিষ্ট এবং অপরিজ্ঞাত করা হলে এটি "মিথ্যা" সমতুল্য, যা একটি সিঙ্ক্রোনাস এইচটিটিপি অনুরোধে একটি অনুরোধকে পরিণত করে। অনুরোধটি প্রক্রিয়া করার সময় এটি ইউআইকে ব্লক করে দেয় এবং এক্সএমএলএইচটিপিআরকুয়েস্ট এপিআইয়ের কিছু বৈশিষ্ট্যও অক্ষম করা হয়েছে।

...

এটি ঠিক করতে, ওপেন.প্লে (এই, আর্গুমেন্ট) এর সাথে ওপেন.কল (....) প্রতিস্থাপন করুন;

এবং এখানে একটি রেফারেন্স লিঙ্ক:

https://xhr.spec.whatwg.org/#the-open()-method


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