কীভাবে jQuery.ajax থেকে প্রতিক্রিয়া স্থিতি কোড পাবেন?


230

নিম্নলিখিত কোডে, আমি যা করার চেষ্টা করছি তা হ'ল একটি jQuery.ajax কল থেকে HTTP প্রতিক্রিয়া কোড পাওয়া। তারপরে, কোডটি 301 (স্থায়ীভাবে সরানো) হলে, 'অবস্থান' প্রতিক্রিয়া শিরোনামটি প্রদর্শন করুন:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>jQuery 301 Trial</title>
  <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>

  <script type="text/javascript">
  function get_resp_status(url) {
    $.ajax({
      url: url,
      complete: function (jqxhr, txt_status) {
        console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
        // if (response code is 301) {
        console.log ("Location: " + jqxhr.getResponseHeader("Location"));
        // }
      }
    });
  }
  </script>
  <script type="text/javascript">
  $(document).ready(function(){
    $('a').mouseenter(
      function () {
        get_resp_status(this.href);
      },
      function () {
      }
    );
  });
  </script>
</head>
<body>
  <a href="http://ow.ly/4etPl">Test 301 redirect</a>
  <a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>

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

অনেক ধন্যবাদ.



আমি জানি এই পুরোনো, কিন্তু আমি মনে করি আমি এটা (XHR.responseURL) মীমাংসিত: stackoverflow.com/a/39416846/4946681
Nate

উত্তর:


221

আমি jqXhr অবজেক্টে স্থিতি ক্ষেত্রটি দেখতে পাচ্ছি, এখানে এটির সাথে কাজ করে একটি ঝাঁকুনি:

http://jsfiddle.net/magicaj/55HQq/3/

$.ajax({
    //...        
    success: function(data, textStatus, xhr) {
        console.log(xhr.status);
    },
    complete: function(xhr, textStatus) {
        console.log(xhr.status);
    } 
});

2
মনে হচ্ছে এটি jsFizz এ কাজ করছে। সেই এবং jQuery ডকুমেন্টেশনের ভিত্তিতে, xhr.status আমার যা করা উচিত তা করা উচিত। যাইহোক, আমি যখন আমার মূল কোডটিতে একই চেষ্টা করি (txt_status jqxhr.status দ্বারা প্রতিস্থাপিত), আমি 0 এর jqxhr.status পেতে থাকি Here এখানে একটি স্ক্রিনশট রয়েছে: twitpic.com/4alsqj
মহেশ

10
আমি বিশ্বাস করি যে সমস্যাটি হ'ল আপনি কোনও ওয়েব সার্ভারের বিরুদ্ধে নয় তবে স্থানীয়ভাবে ফাইল সিস্টেম থেকে চালাচ্ছেন। আমি মনে করি আপনি যদি কোনও স্থানীয় ওয়েব সার্ভারটি সরিয়ে ফেলে থাকেন তবে এটি সঠিকভাবে কাজ করবে, এখানে এই বিষয়ে কিছু নিবন্ধ দেওয়া আছে: Pearweb.com/javascript/XMLHttpRequest.html developer.mozilla.org/En/Using_XMLHttpRequest "এখানে লক্ষ্য করার মূল বিষয়টি হ'ল 200 এর পরিবর্তে সাফল্যের জন্য ফলাফলের স্থিতি 0 এর সাথে তুলনা করা হচ্ছে This কারণ ফাইল এবং এফটিপি স্কিমগুলি এইচটিটিপি ফলাফল কোড ব্যবহার করে না ""
অ্যাডাম আইরেস

এটা অসাধারণ. বিশেষত যখন আমি আমার ব্যাকএন্ডে স্থিতি কোডগুলি প্রেরণ করতে পারি।
থিমিডলওয়ে

মনে রাখবেন যে প্রতিক্রিয়া যদি 302 এর মতো পুনর্নির্দেশের স্থিতি হয় তবে এটি 200
অ্যাকাউন্টেন্টকে

52

এই পুরানো থ্রেডটি জুড়ে এসে আমি নিজেই অনুরূপ সমাধান খুঁজছি এবং এর .complete()পদ্ধতিটি ব্যবহারের জন্য গৃহীত উত্তরটি পেয়েছি jquery ajax। আমি jquery ওয়েবসাইটে নোটিশটি এখানে উদ্ধৃত :

JqXHR.success (), jqXHR.error (), এবং jqXHR.complete () callbacks হয় অবচিত jQuery এর 1.8 হিসাবে। আপনার কোডটি তাদের পরিণামে অপসারণের জন্য প্রস্তুত করার জন্য, পরিবর্তে jqXHR.done (), jqXHR.fail () এবং jqXHR.always () ব্যবহার করুন।

status codeএকটি আজাক্স প্রতিক্রিয়া জানার জন্য , কেউ নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

$.ajax( url [, settings ] )
.always(function (jqXHR) {
    console.log(jqXHR.status);
});

.done()এবং একইভাবে কাজ করে.fail()


2
এটি "অপরিজ্ঞাত" ফিরছে
পেড্রো

43

$ .জ্যাক্স ফাংশনে পাস করা প্যারামিটার অবজেক্টের স্ট্যাটাস কোড কোডটি ব্যবহার করা সম্ভবত এটি আরও আইডিয়োমেটিক jQuery ery

$.ajax({
  statusCode: {
    500: function(xhr) {
      if(window.console) console.log(xhr.responseText);
    }
  }
});

তবে লিভিংস্টন স্যামুয়েল যেমন বলেছিলেন, জাভাস্ক্রিপ্টে 301 স্থিতি কোডগুলি পাওয়া সম্ভব নয়।


41

যখন আপনার এক্সএইচআর অনুরোধটি পুনঃনির্দেশ প্রতিক্রিয়া দেয় (HTTP স্থিতি 301, 302, 303, 307), XMLHttpRequest স্বয়ংক্রিয়ভাবে পুনঃনির্দেশিত URL অনুসরণ করে এবং সেই URL এর স্থিতি কোডটি ফেরত দেয়

আপনি statusএক্সএইচআর অবজেক্টের বৈশিষ্ট্যের মাধ্যমে অ-পুনঃনির্দেশ স্থিতি কোডগুলি (200, 400, 500 ইত্যাদি) পেতে পারেন ।

তাই আপনি যদি একটি প্রতিক্রিয়া শীর্ষক থেকে আপনাকে পুনঃনির্দেশিত অবস্থান পেতে পারে না 301, 302, 303বা 307অনুরোধ।

ব্রাউজারটিকে এটি না দিয়ে আপনি পুনর্নির্দেশকে পরিচালনা করতে পারেন এমনভাবে প্রতিক্রিয়া জানাতে আপনার সার্ভারের যুক্তি পরিবর্তন করতে হতে পারে। একটি উদাহরণ বাস্তবায়ন


24

আপনি আপনার রিসোন সামগ্রীটি পরীক্ষা করতে পারেন, এটি কেবল কনসোল.লগ করুন এবং আপনি দেখবেন যে হুইচের সম্পত্তিটির একটি স্থিতির কোড রয়েছে। আপনি jsons না বুঝতে পারলে, দয়া করে ভিডিওটি দেখুন: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

এটি খুব প্রাথমিক জ্ঞান ব্যাখ্যা করে যা আপনাকে জাভাস্ক্রিপ্টের সাথে আরও স্বাচ্ছন্দ্য বোধ করতে পারে।

আপনি এটি আজাক্স অনুরোধের সংক্ষিপ্ত সংস্করণ দিয়ে করতে পারেন, দয়া করে উপরের কোডটি দেখুন:

$.get("example.url.com", function(data) {
                console.log(data);
            }).done(function() {
               // TO DO ON DONE
            }).fail(function(data, textStatus, xhr) {
                 //This shows status code eg. 403
                 console.log("error", data.status);
                 //This shows status message eg. Forbidden
                 console.log("STATUS: "+xhr);
            }).always(function() {
                 //TO-DO after fail/done request.
                 console.log("ended");
            });

কনসোল আউটপুট উদাহরণ:

error 403 
STATUS: Forbidden 
ended

1
সম্পূর্ণ ফাংশন পরামিতি সহ কীভাবে সম্পন্ন, ব্যর্থ এবং সর্বদা ব্যবহার করা যায় তার পুরো কোড সরবরাহ করার জন্য ধন্যবাদ।
IvanD

4

jqxhr একটি json অবজেক্ট:

সম্পূর্ণ আয়:
jqXHR (jQuery 1.4.x, XMLHTTPRequest) অবজেক্ট এবং অনুরোধের স্ট্যাটাসটিকে শ্রেণিবদ্ধ করে এমন একটি স্ট্রিং ("সাফল্য", "নোমোডাইফাইড", "ত্রুটি", "সময়সীমা", "পরিত্যাগ", বা "পার্সেরেরর") ।

দেখুন: jQuery আজাক্স

সুতরাং আপনি কি করবেন:

jqxhr.status স্ট্যাটাস পেতে


2

NB: jQuery ব্যবহার করে 3.4.1

$.ajax({
  url: URL,
  success: function(data, textStatus, jqXHR){
    console.log(textStatus + ": " + jqXHR.status);
    // do something with data
  },
  error: function(jqXHR, textStatus, errorThrown){
    console.log(textStatus + ": " + jqXHR.status + " " + errorThrown);
  }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.