2012-07-18 20 views
6

मैं this tutorial पर आधारित एक AJAX क्वेरी को अधिकृत करने का प्रयास कर रहा हूं। यह क्रिप्टो लाइब्रेरी का उपयोग कर उपयुक्त प्राधिकरण जानकारी के साथ भेजने से पहले अनुरोध शीर्षलेख सेट करता है। मेरी समस्या यह है कि हेडर अनुरोध पर सेट नहीं लगते हैं।jQuery AJAX शीर्षलेख प्राधिकरण

beforeSend : function(xhr) { 
    var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password); 
    var base64 = Crypto.util.bytesToBase64(bytes); 
    xhr.setRequestHeader("Authorization", "Basic " + base64); 
}, 
+0

आपको क्या लगता है कि हेडर सेट नहीं है? क्या आपने वास्तविक एक्सएचआर कॉल का निरीक्षण किया है? क्या 'क्रिप्टो', 'उपयोगकर्ता नाम' या 'पासवर्ड' को 'अपरिभाषित' पर सेट किया जा सकता है? आप कर्ल का उपयोग भी कर सकते हैं और हेडर (-एच) सेट कर सकते हैं और देख सकते हैं कि सर्वर साइड समस्या नहीं है या नहीं। बीटीडब्लू, मैं वह हूं जिसने ब्लॉग पोस्ट लिखा था ;-) – pdeschen

+0

मैं लॉग में xhr कॉल लिख रहा हूं, मैं ऑब्जेक्ट के भीतर क्या ढूंढ रहा हूं? मैंने जांच की है और सभी 3 सही ढंग से परिभाषित हैं। वर्तमान में क्या हो रहा है मुझे स्पष्ट कारणों से 401 अनधिकृत त्रुटि मिल रही है। यह जानना अच्छा है, अच्छी पोस्ट। क्रोम के साथ –

+0

, यदि आप डेवलपर टूल्स खोलते हैं और आप नेटवर्क टैब का चयन करते हैं और फिर नीचे सूची में एक्सएचआर तत्व चुनते हैं, तो आप वास्तविक AJAX अनुरोध, इसकी सामग्री, शीर्षलेख और सभी का निरीक्षण कर सकते हैं। – pdeschen

उत्तर

8

मुद्दा dataTypeJSONP के लिए सेटिंग नहीं किया गया था: यहाँ मेरी कोड है। चूंकि यह नहीं किया गया था, ब्राउज़र ने मानक AJAX अनुरोध के रूप में कॉल का अर्थ दिया जिसका अर्थ था कि इसे समान-मूल-नीति के तहत अवरुद्ध किया जा रहा था। (क्रेडिट Crpyto सुझाव देने के लिए @pdeschen को जाता है) संदर्भ के लिए

कार्य कोड:

<script type='text/javascript'> 
// define vars 
var username = ''; 
var password = ''; 
var url = ''; 

// ajax call 
$.ajax({ 
    url: url, 
    dataType : 'jsonp', 
    beforeSend : function(xhr) { 
     // generate base 64 string from username + password 
     var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password); 
     var base64 = Crypto.util.bytesToBase64(bytes); 
     // set header 
     xhr.setRequestHeader("Authorization", "Basic " + base64); 
    }, 
    error : function() { 
     // error handler 
    }, 
    success: function(data) { 
     // success handler 
    } 
}); 
</script> 
+1

आप उपयोगकर्ता नाम और पासवर्ड को बेस 64 पर 'btoa (username +": "+ password) ' –

+0

@DanielHigueras नाइस के साथ एन्कोड भी कर सकते हैं! इस फ़ंक्शन के बारे में नहीं पता था, [ऐसा लगता है कि यह केवल आईई 10+ में उपलब्ध है], लेकिन हे .. स्क्रू आईई –

0

यह अंत में मेरे लिए काम करने लगता है। एक व्यक्तिगत कॉल के आधार पर टक्कर हो सकती है। भविष्य में कनेक्शन विकल्पों के लिए इस विधि को डिफ़ॉल्ट के रूप में सेट करता है।

//Function(jqXHR jqXHR) 
$.ajaxSetup({beforeSend: function(jqXHR) { 
    jqXHR.setRequestHeader("My-Header", "My-Value"); 
} }); 
+2

ऐसा लगता है कि 'AJAXSetup' अब मौजूद नहीं है, इसलिए मैंने' AJAXSend': \t '$ (दस्तावेज़) .ajaxSend (फ़ंक्शन (ई, एक्सएचआर, सेटिंग्स) { \t \t xhr.setRequestHeader ("प्रमाणीकरण", "mytoken"); \t}); '। Http://api.jquery.com/ajaxSend/ देखें – falsarella

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