আমি কীভাবে জেএস বা jQuery এর সাথে এজাক্স অনুরোধে একটি কাস্টম এইচটিটিপি শিরোনাম যুক্ত করতে পারি?


323

কেউ কি জাভাস্ক্রিপ্ট বা jQuery ব্যবহার করে একটি কাস্টম এইচটিটিপি হেডার যুক্ত করতে বা তৈরি করতে জানেন?

উত্তর:


584

আপনার যা প্রয়োজন তার উপর নির্ভর করে বেশ কয়েকটি সমাধান রয়েছে ...

যদি আপনি স্বতন্ত্র অনুরোধে একটি কাস্টম শিরোনাম (বা শিরোনামের সেট) যুক্ত করতে চান তবে কেবল headersসম্পত্তি যুক্ত করুন:

// Request with custom header
$.ajax({
    url: 'foo/bar',
    headers: { 'x-my-custom-header': 'some value' }
});

আপনি যদি প্রতিটি অনুরোধে একটি ডিফল্ট শিরোনাম (বা শিরোনামের সেট) যুক্ত করতে চান তবে ব্যবহার করুন $.ajaxSetup():

$.ajaxSetup({
    headers: { 'x-my-custom-header': 'some value' }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Overwrites the default header with a new header
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

যদি আপনি চাই প্রতি যে অনুরোধ একটি শিরোলেখ (অথবা হেডার সেট) যোগ তারপর ব্যবহার beforeSendসঙ্গে হুক $.ajaxSetup():

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('x-my-custom-header', 'some value');
    }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Sends both custom headers
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

সম্পাদনা (আরও তথ্য): একটি বিষয় সম্পর্কে সচেতন হওয়াটি হ'ল ajaxSetupআপনার সাথে কেবলমাত্র একটি সেট ডিফল্ট হেডারের সংজ্ঞা দেওয়া যেতে পারে এবং আপনি কেবল একটির সংজ্ঞা দিতে পারেন beforeSend। আপনি যদি ajaxSetupএকাধিকবার কল করেন তবে কেবলমাত্র শেষের হেডারের সেটটি প্রেরণ করা হবে এবং কেবলমাত্র শেষের আগে পাঠানো কলব্যাক কার্যকর হবে।


আমি beforeSendযখন একটি নতুন সংজ্ঞা দিই তখন কি হয় $.ajax?
কোস্তাস

3
আপনি কেবল একটি beforeSendকলব্যাক সংজ্ঞায়িত করতে পারেন । আপনি যদি $.ajaxSetup({ beforeSend: func... })দুবার কল করেন তবে দ্বিতীয় কলব্যাকটি কেবলমাত্র আগুন জ্বলবে।
Prestaul

1
সম্পর্কে আরও বিশদ যুক্ত করতে আমার উত্তর আপডেট ajaxSetup
Prestaul

2
দেখে মনে হচ্ছে এটি CORS অনুরোধ (প্রতিটি ব্রাউজার) এর সাথে কাজ করে না। এখানে কি কাজ আছে ?
সোভাসার

1
@ সি 8, এটি আমার কাছে ক্রস ডোমেন ইস্যুর মতো দেখাচ্ছে। আপনি এক ডোমেন থেকে অন্য ডোমেইনে একটি অনুরোধ করতে পারবেন না। সিওআরএস অনুসন্ধান করার চেষ্টা করুন এবং দেখুন এটি সাহায্য করে কিনা।
প্রেস্তুল

54

অথবা, আপনি যদি ভবিষ্যতের প্রতিটি অনুরোধের জন্য কাস্টম শিরোনাম প্রেরণ করতে চান তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

$.ajaxSetup({
    headers: { "CustomHeader": "myValue" }
});

এইভাবে ভবিষ্যতের প্রতিটি এজাক্স অনুরোধে কাস্টম শিরোনাম থাকবে, যদি না অনুরোধের বিকল্পগুলির দ্বারা স্পষ্টভাবে ওভাররাইড করা হয়। আপনি এখানে আরও তথ্য পেতে পারেনajaxSetup


1
যেখানে আমি সত্যিই এটি সম্পাদন করতে চাই, বাস্তবে এটি কাজ করে না বলে মনে হয়।
ট্রিপ

1
আচ্ছা আপনাকে অবশ্যই নিশ্চিত করা উচিত যে প্রকৃত এজাক্স কল করার আগে এজ্যাক্সআপটি কল হয়েছিল। এটি কাজ করবে না এমন অন্য কোনও কারণ আমি জানি না :)
সজিলার্ড মুজসি

20

জিকিউরি আজাক্স ধরে নিলে আপনি কাস্টম শিরোনামগুলি এর মতো যুক্ত করতে পারেন -

$.ajax({
  url: url,
  beforeSend: function(xhr) {
    xhr.setRequestHeader("custom_header", "value");
  },
  success: function(data) {
  }
});

19

এক্সএইচআর 2 ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হয়েছে:

function xhrToSend(){
    // Attempt to creat the XHR2 object
    var xhr;
    try{
        xhr = new XMLHttpRequest();
    }catch (e){
        try{
            xhr = new XDomainRequest();
        } catch (e){
            try{
                xhr = new ActiveXObject('Msxml2.XMLHTTP');
            }catch (e){
                try{
                    xhr = new ActiveXObject('Microsoft.XMLHTTP');
                }catch (e){
                    statusField('\nYour browser is not' + 
                        ' compatible with XHR2');                           
                }
            }
        }
    }
    xhr.open('POST', 'startStopResume.aspx', true);
    xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState == 4 && xhr.status == 200) {
            receivedChunks++;
        }
    };
    xhr.send(chunk);
    numberOfBLObsSent++;
}; 

আশা করি এইটি কাজ করবে.

আপনি যদি নিজের অবজেক্ট তৈরি করেন তবে আপনি অনুরোধ প্রেরণের আগে একটি নাম নির্দিষ্ট করতে setRequestHeader ফাংশন এবং একটি মান ব্যবহার করতে পারেন।


2
যদিও এটি 2011 সালে সঠিক হতে পারে, তবে চাকাটি পুনরায় উদ্ভাবন না করা এবং এটি এর পরিবর্তে জেপ্টো বা জিকুয়ের মতো একটি এজেএক্স লাইব্রেরি ব্যবহার করা ভাল idea
ড্যান ড্যাসক্লেস্কু

4
আপনি যদি কোনও বিদ্যমান এক্সএইচআর 2 কলটিতে শিরোনাম যোগ করার চেষ্টা না করেন এবং কেবল তার জন্য jQuery ব্যবহার করার জন্য এটি পুনরায় লেখা শুরু করতে চান না ... তবে এই মুহুর্তে @ গ্রাইজলির একমাত্র কার্যকর উত্তর রয়েছে।
রোরিহিট

@ অলিগাজানী সমস্যাটি হ'ল নির্দিষ্ট অ্যাপ্লিকেশন বা লাইব্রেরিগুলি (যেমন THREE.js) $.ajax*বি / সি ফাংশন ব্যবহার করে না তারা jQuery এর উপর নির্ভর করে না এবং পরিবর্তে এক্সএইচআর ব্যবহার করে তাই এই ক্ষেত্রে এটিই একমাত্র বৈধ বিকল্প।
কোবার্ন

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

19

আপনি jQuery ব্যবহার না করে এটিও করতে পারেন। এক্সএমএলএইচটিপিপিউইকুয়েস্টের প্রেরণ পদ্ধতিটি ওভাররাইড করুন এবং সেখানে শিরোনাম যুক্ত করুন:

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
    this.setRequestHeader('x-my-custom-header', 'some value');
    this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;

12

ডক্সে$.ajaxSetup() বর্ণিত হিসাবে আপনার ব্যবহার এড়ানো উচিত । পরিবর্তে নিম্নলিখিত ব্যবহার করুন:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    jqXHR.setRequestHeader('my-custom-header', 'my-value');
});

6

ধরে নিচ্ছেন যে আপনার অর্থ "এজ্যাক্স ব্যবহার করার সময়" এবং "একটি এইচটিটিপি রিকোয়েস্ট শিরোনাম", তারপরে headersআপনি যে অবজেক্টে যাচ্ছেন তার মধ্যে সম্পত্তিটি ব্যবহার করুনajax()

শিরোনাম (1.5 যোগ করা হয়েছে)

ডিফল্ট: {}

অনুরোধ সহ প্রেরণে অতিরিক্ত শিরোনাম কী / মান জোড়ার মানচিত্র। এই সেটিংটি আগে পাঠানো ফাংশন বলার আগে সেট করা থাকে; অতএব, শিরোনাম সেটিংসে কোনও মান পূর্ববর্তী পাঠানো ফাংশনের মধ্যে থেকে ওভাররাইট করা যেতে পারে।

- http://api.jquery.com/jQuery.ajax/



1

আপনি জেএস আনতে ব্যবহার করতে পারেন

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