2013-01-15 40 views
11

में 401 (अनधिकृत) AJAX त्रुटि से छुटकारा पाएं मैं jQuery.ajax कॉल का उपयोग कर जावास्क्रिप्ट के माध्यम से एपीआई को कॉल कर रहा हूं। एपीआई 401 के साथ प्रतिक्रिया देता है यदि उपयोगकर्ता प्रमाणीकृत नहीं है और मैं केवल इस कॉल के लिए इस त्रुटि को अनदेखा करना चाहता हूं।ब्राउज़र कंसोल

मैंने jQuery विकल्पों में वर्णित सभी कॉलबैक विकल्पों का प्रयास किया है लेकिन त्रुटि अभी भी ब्राउज़र कंसोल (फ़ायरफ़ॉक्स और क्रोम दोनों में) में पॉप आउट हो गई है।

$.ajax({ 
    type: 'GET', 
    url: '/url-with-auth', 
    dataType: 'json', 
    statusCode: { 
     401: function (error) { 
      // simply ignore this error 
      console.log(error); 
     } 
    }, 
    complete: logall, 
    error: function() { 
     // simply ignore this error 
     console.log(error); 
    }, 
    async: false 
}).fail(function() { 
     // ignore the error and do nothing else 
     console.log("$.get failed!"); 
    }); 

यह भी के बाद से ब्राउज़र है कि सोचता है कि एक मचान मशीन जो .htaccess फ़ाइल द्वारा सुरक्षित है पर फिर से उपयोगकर्ता क्रेडेंशियल अनुरोध के पक्ष प्रभाव है:

यहाँ एक नमूना कोड जो त्रुटि ट्रिगर है उपयोगकर्ता प्रमाणीकृत नहीं है, इसलिए निम्नलिखित अनुरोधों में उपयोगकर्ता को अपने http प्रमाण-पत्रों को पुन: दर्ज करने की आवश्यकता है।

क्या इस त्रुटि को पूरी तरह से अनदेखा करने का कोई तरीका है?

संपादित

वर्तमान में मैं जो पूरी तरह से आवेदन पक्ष कैश किया गया है एक HTML टेम्पलेट है और मैं प्रदर्शन कारणों से इस व्यवहार रखना चाहते हैं। लेआउट में परिवर्तन करने वाला एकमात्र हिस्सा वर्तमान उपयोगकर्ता के लिए लॉगिन सूचनाएं है, इसलिए मैं उपयोगकर्ताओं में लॉग इन नहीं होने के लिए डिफ़ॉल्ट मार्कअप के साथ (कैश किए गए) पृष्ठ को प्रस्तुत कर रहा हूं और फिर jQuery का उपयोग करके मैं मार्कअप के प्रासंगिक तत्वों को प्रतिस्थापित करता हूं लॉगिन अजाक्स कॉल द्वारा लौटाई गई जानकारी। तो यदि उपयोगकर्ता लॉग नहीं है और AJAX एंडपॉइंट वापसी 401 मुझे कुछ भी चाहिए, तो मार्कअप वही रहना चाहिए।

सब कुछ इस समय काम कर रहा है, केवल बदसूरत बात यह है कि मेरे पास कंसोल में 401 जावास्क्रिप्ट त्रुटि है और मैं इसे से छुटकारा पाना चाहता हूं।

यहाँ संदेश का स्क्रीनशॉट मैं के बारे में बात कर रहा हूँ है:

console error

+0

आप पर http://stackoverflow.com/questions/10267683/jquery-ajax-handle-401-unauthorized –

+0

@RachelGallen पहले से ही ऐसा ही किया और वहाँ सभी सुझाव की कोशिश की लग सकता है, हैंडलर निष्पादित किया गया है, लेकिन त्रुटि अभी भी दिखाया गया है।मैं इसे पूरी तरह से टालना चाहता हूं क्योंकि इस मामले में स्क्रिप्ट का उद्देश्य केवल डोम तत्व जोड़ना है जब उपयोगकर्ता लॉग होता है और यदि वह नहीं है तो मैं केवल कॉल को अनदेखा करना चाहता हूं। – Fabio

+0

हम्म ओह ठीक है, आशा है कि आपको जल्द ही एक उत्तर मिल जाएगा। –

उत्तर

-1

आप पृष्ठ पर एक छिपी हुई फ़ील्ड को जोड़ सकते हैं (मैं अनुमान लगा रहा हूँ अपने गतिशील रूप से उत्पन्न) की तरह:

<input type="hidden" name="isLoggedIn" value="true" (or false) /> 
आप जावास्क्रिप्ट में

फिर, जगह

if ($('input[name=isLoggedIn"]').val() == "true") 
{ 
    //your ajax call here 
} 
+0

काफी स्पष्ट रूप से, मुझे नहीं लगता कि अधिकांश उपयोगकर्ता कंसोल देखते हैं। कंसोल का उपयोग करने का एकमात्र कारण विकास के लिए है या यदि कोई साइट अजीब – allanx2000

+0

पर काम कर रही है, तो मुझे पता है कि सशर्त कोड कैसे लिखना है ;-) मुख्य आवश्यकता है कि टेम्पलेट को पूरी तरह से कैश करने योग्य उपयोगकर्ताओं के लिए लॉग इन करने के लिए एचटीएमएल को नहीं बदला जाए। यह कोड उस आवश्यकता को तोड़ देता है। – Fabio

+0

क्या इस पृष्ठ पर कुछ भी है जो इंगित करेगा कि उपयोगकर्ता लॉग इन है? isgoggedIn – allanx2000

3

मैं भी भाग गया इस समस्या में और HTTP 401 और 404 आदि त्रुटियों के लिए जावास्क्रिप्ट कंसोल में अपवाद को कम करना चाहता था। मुझे यह सवाल मिला और यह नहीं देखा कि त्रुटि() और statusCode() हैंडलर ने अपवाद को शांत क्यों नहीं किया, इसलिए मैंने अपनी खुदाई की।

जहां तक ​​मैं यह कह सकता हूं कि यह ब्राउज़र में मूल AJAX XMLHttpRequest ऑब्जेक्ट के साथ एक समस्या है, jQuery के साथ नहीं। या तो xhrTest (0) या xhrTest (1) है, जो jQuery नजरअंदाज, कि परिणाम के साथ

function xhrTest(index) { 
    var ajaxObjects = [ 
     $.ajaxSettings.xhr(), // what jquery returns 
     new XMLHttpRequest() // the native one in the browser 
    ]; 
    var ajax = ajaxObjects[index]; 
    ajax.onreadystatechange = function() {console.log("xhrTest: state: " + ajax.readyState)}; 
    var errorHandler = function() {console.log("xhrTest: error");}; 
    ajax.onerror = errorHandler; 
    ajax.onabort = errorHandler; 
    ajax.open("GET", "/fileThatDoesNotExist", true); 
    ajax.send();  
} 

ध्यान दें कि जब इस बुला (मैं इसे JavaScript कंसोल से किया था): इस साबित करने के लिए मैं निम्नलिखित परीक्षण कोड का इस्तेमाल किया एक ही कर रहे हैं:

same results whether jQuery is used or not

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^