jQuery এবং AJAX প্রতিক্রিয়া শিরোনাম


163

সুতরাং আমি এই jQuery AJAX কল পেয়েছি, এবং 302 পুনর্নির্দেশ আকারে সার্ভার থেকে প্রতিক্রিয়া আসে। আমি এই পুনঃনির্দেশটি নিতে চাইছি এবং এটি একটি আইফ্রেমে লোড করতে চাই, তবে যখন আমি জাভাস্ক্রিপ্ট সতর্কতা সহ শিরোনামের তথ্যটি দেখার চেষ্টা করব তখন এটি নালায উঠে আসে, যদিও ফায়ারব্যাগ এটি সঠিকভাবে দেখে।

কোডটি এখানে, যদি এটি সাহায্য করে:

$j.ajax({
    type: 'POST',
    url:'url.do',
    data: formData,
    complete: function(resp){
        alert(resp.getAllResponseHeaders());
    }
});

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


3
যদি আপনি এই প্রশ্নটি 2017 বা তার পরে দেখছেন তবে দয়া করে বিদ্যমান বেশিরভাগ উত্তর দিয়ে সময় নষ্ট করবেন না। যদি আপনার সমস্যা ওপির মতো হয় তবে আপনার দুটি বিকল্প রয়েছে: ১) একটি প্রক্সি সার্ভার সেট আপ করুন যা postমূল সার্ভারটি করবে এবং লক্ষ্য-ডেটা বের করবে এবং ফ্রন্ট-এন্ড জেএস লক্ষ্য-ডেটার জন্য এই প্রক্সি-সার্ভারের জন্য অনুরোধ করবে। অথবা, 2) সিওআরএসকে অনুমতি দেওয়ার জন্য সার্ভারের কোড পরিবর্তন করুন।
kmonsoor

উত্তর:


186

আপনি jquery এর একটি পুরানো সংস্করণ ব্যবহার করা হলে cballou এর সমাধান কাজ করবে। নতুন সংস্করণগুলিতে আপনিও চেষ্টা করতে পারেন:

  $.ajax({
   type: 'POST',
   url:'url.do',
   data: formData,
   success: function(data, textStatus, request){
        alert(request.getResponseHeader('some_header'));
   },
   error: function (request, textStatus, errorThrown) {
        alert(request.getResponseHeader('some_header'));
   }
  });

ডক্স অনুসারে XMLHttpRequest অবজেক্ট jQuery 1.4 হিসাবে উপলব্ধ।


5
JQuery> = 1.5 হিসাবে, একে জেএকএক্সএইচআর বলা উচিত , যা কোনও এক্সএইচআর অবজেক্টের সুপারসেট।
জোহান

136

যদি এটি একটি সিওআরএস অনুরোধ হয় তবে আপনি ডিবাগ সরঞ্জামগুলিতে সমস্ত শিরোলেখ দেখতে পাবেন (যেমন ক্রোম-> পরিদর্শন উপাদান-> নেটওয়ার্ক), তবে এক্সএইচআর অবজেক্ট কেবল শিরোনাম পুনরুদ্ধার করবে (এর মাধ্যমে xhr.getResponseHeader('Header')) যদি এই জাতীয় শিরোনাম একটি সাধারণ প্রতিক্রিয়া শিরোনাম হয় :

  • Content-Type
  • Last-modified
  • Content-Language
  • Cache-Control
  • Expires
  • Pragma

যদি এটি এই সেটটিতে না থাকে তবে এটি অবশ্যই সার্ভারের দ্বারা ফিরিয়ে দেওয়া অ্যাক্সেস-কন্ট্রোল-এক্সপোজ-হেডার শিরোনামে উপস্থিত থাকতে হবে ।

প্রশ্নযুক্ত কেস সম্পর্কে, যদি এটি একটি সিওআরএস অনুরোধ Locationহয় তবে XMLHttpRequestকেবলমাত্র যদি নীচের শিরোনামটি উপস্থিত থাকে তবে কেবলমাত্র যদি বস্তুর মাধ্যমে শিরোনামটি পুনরুদ্ধার করতে সক্ষম হয় :

Access-Control-Expose-Headers: Location

যদি এটি কোনও সিওআরএস অনুরোধ না হয় তবে XMLHttpRequestএটি পুনরুদ্ধার করতে কোনও সমস্যা হবে না।


3
@ অ্যাকডজিনিয়র আপনাকে ধন্যবাদ জানায় এটি আমাকেও সহায়তা করেছিল, আমি শিরোনামের প্রতিক্রিয়াতে কেন আউটপুট ছিল না তা খুঁজে বের করার জন্য কিছুটা সময় ব্যয় করার পরে
ড্যানিয়েল

33
 var geturl;
  geturl = $.ajax({
    type: "GET",
    url: 'http://....',
    success: function () {
      alert("done!"+ geturl.getAllResponseHeaders());
    }
  });

1
আমার জন্য কাজ করে না। আমি অন্য সাইটে অনুরোধ করছি? (
এজ্যাক্স

9
আমার মতো কাজ করতে পারে না এমন লোকদের জন্য। এটি সম্ভবত কারণ আপনি ক্রস ডোমেন অ্যাক্সেস করছেন যা jquery XHR ব্যবহার করে না। api.jquery.com/jQuery.get
এইচ - এন

কবজির মতো জাগ্রত .. +1
এরশাকিরআনসারী

18

এজেএক্স এবং 302 পুনর্নির্দেশ সম্পর্কে দুর্ভাগ্যজনক সত্যটি হ'ল আপনি রিটার্ন থেকে শিরোনামগুলি পেতে পারেন না কারণ ব্রাউজারটি কখনই তাদের এক্সএইচআরগুলিতে দেয় না। যখন কোনও ব্রাউজার কোনও 302 দেখায় এটি স্বয়ংক্রিয়ভাবে পুনঃনির্দেশ প্রয়োগ করে। এই ক্ষেত্রে, আপনি ফায়ারবগে হেডারটি দেখতে পাবেন কারণ ব্রাউজারটি এটি পেয়েছে, তবে আপনি এটি অজ্যাক্সে দেখতে পাবেন না, কারণ ব্রাউজারটি এটি পাস করে নি। এই কারণেই সাফল্য এবং ত্রুটি পরিচালনাকারীরা কখনই ডাকা হয় না। শুধুমাত্র সম্পূর্ণ হ্যান্ডলারকে ডাকা হয়।

http://www.checkupdown.com/status/E302.html

The 302 response from the Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser

এখানে বিষয় সম্পর্কে কিছু স্ট্যাকওভারফ্লো পোস্ট রয়েছে। কিছু পোস্ট এই সমস্যাটি সম্পর্কে জানতে হ্যাকগুলি বর্ণনা করে।

কীভাবে jQuery Ajax কলের পরে পুনর্নির্দেশের অনুরোধটি পরিচালনা করবেন

জাভাস্ক্রিপ্টে 302 ফাউন্ড ধরা হচ্ছে

HTTP পুনর্নির্দেশ: 301 (স্থায়ী) বনাম 302 (অস্থায়ী)


10

অন্তর্নিহিত XMLHttpRequest অবজেক্ট jQuery দ্বারা ব্যবহৃত সর্বদা 302 স্থিতির কোডটি ফেরত দেওয়ার পরিবর্তে নিঃশব্দে পুনঃনির্দেশগুলি অনুসরণ করবে । অতএব, আপনি ফিরে ইউআরএল পেতে jQuery এর AJAX অনুরোধ কার্যকারিতা ব্যবহার করতে পারবেন না। পরিবর্তে, আপনাকে সমস্ত ডেটা একটি ফর্মের মধ্যে স্থাপন করতে হবে এবং iframe এর গুণকের মানতে targetবৈশিষ্ট্যটি সেট করে ফর্মটি জমা দিতে হবে name:

$('#myIframe').attr('name', 'myIframe');

var form = $('<form method="POST" action="url.do"></form>').attr('target', 'myIframe');
$('<input type="hidden" />').attr({name: 'search', value: 'test'}).appendTo(form);

form.appendTo(document.body);
form.submit();

সার্ভারের url.doপৃষ্ঠাটি iframe এ লোড করা হবে, তবে এর 302 স্থিতি উপস্থিত হলে, iframe চূড়ান্ত গন্তব্যে পুনর্নির্দেশ করা হবে।


9

এটা চেষ্টা কর:

type: "GET",
async: false,
complete: function (XMLHttpRequest, textStatus) {
    var headers = XMLHttpRequest.getAllResponseHeaders();
}

হুম। প্রতিক্রিয়াটির জন্য অনেক ধন্যবাদ, কিন্তু এটি এখনও শূন্য ফিরে আসছে। অন্য কোন ধারণা?
শেন

সম্ভবত আপনি jquery একটি পুরানো সংস্করণ ব্যবহার করছেন।
রোভসেন

6

জেকারি 3 এবং লেটারের জন্য 2018 আপডেট করুন

আমি জানি এটি একটি পুরানো প্রশ্ন তবে উপরের সমাধানগুলির মধ্যে একটিও আমার পক্ষে কার্যকর হয়নি। সমাধান যে এখানে কাজ করেছে:

//I only created this function as I am making many ajax calls with different urls and appending the result to different divs
function makeAjaxCall(requestType, urlTo, resultAreaId){
        var jqxhr = $.ajax({
            type: requestType,
            url: urlTo
        });
        //this section is executed when the server responds with no error 
        jqxhr.done(function(){

        });
        //this section is executed when the server responds with error
        jqxhr.fail(function(){

        })
        //this section is always executed
        jqxhr.always(function(){
            console.log("getting header " + jqxhr.getResponseHeader('testHeader'));
        });
    }

2

প্লিজস্ট্যান্ডে +1 এবং এখানে আমার অন্যান্য হ্যাক রয়েছে:

অনুসন্ধানের পরে এবং খুঁজে পেয়েছি যে "ক্রস আজাক্স অনুরোধ" এক্সএইচআর অবজেক্ট থেকে প্রতিক্রিয়া শিরোনাম পেতে পারে না, আমি ছেড়ে দিয়েছি। এবং পরিবর্তে iframe ব্যবহার করুন।

1. <iframe style="display:none"></iframe>
2. $("iframe").attr("src", "http://the_url_you_want_to_access")
//this is my aim!!!
3. $("iframe").contents().find('#someID').html()  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.