के साथ कॉल करता है मेरे पास एक आरईएसटी आधारित सर्वर है जिसे मैं JQuery का उपयोग करने के साथ संवाद करने की कोशिश कर रहा हूं। एक्सएमएल और जेएसओएन दोनों प्रतिक्रिया प्रारूप के रूप में उपलब्ध हैं, इसलिए मैं JSON का उपयोग कर रहा हूं।JQuery अजाक्स HTTP मूल प्रमाणीकरण
कनेक्शन तो बुनियादी HTTP प्रमाणीकरण के सभी SSL पसंद का हमारे प्राधिकरण विधि से किया गया है कर रहे हैं, और हम अन्य सामने समाप्त होता है के साथ कोई समस्या नहीं पड़ा है (कच्चे जावास्क्रिप्ट, सिल्वरलाइट, आदि ...)
अब मैं प्रयास कर रहा हूँ JQuery के साथ कुछ एक साथ रखने और HTTP मूल प्रमाणीकरण का उपयोग कर अंतहीन समस्याओं को रखने के लिए।
मैंने कई पिछले प्रश्नों के माध्यम से खराब किया है जिनमें से अधिकतर समाधान हैं जो वास्तव में काम नहीं करते हैं या क्रॉस मूल पहुंच पर पूरी समस्या को दोष नहीं देते हैं, जिसे मैं पहले से ही मूल जावास्क्रिप्ट परीक्षण में पार कर चुका हूं। प्रतिक्रियाएं हमेशा अनुरोध में प्रदान की गई मूल शीर्षलेख पर Access-Control-Allow-Origin
प्रदान करती हैं, और यह मेरे परीक्षणों के जवाब में देखी जा सकती है।
बुनियादी जावास्क्रिप्ट में, इस पूरे कॉल बहुत बस के साथ पूरा किया है:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
इस पर JQuery प्रयास काफी मानक है:
$.ajax({
username: 'test',
password: 'testpassword',
url: 'https://researchdev-vm:8111/card',
type: 'GET',
dataType: 'json',
crossDomain: true,
/*data: { username: 'test', password: 'testpassword' },*/
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization",
//"Basic " + encodeBase64(username + ":" + password));
"Basic AAAAAAAAAAAAAAAAAAA=");
},
sucess: function(result) {
out('done');
}
});
एकमात्र तरीका वास्तव में काम करने के लिए लगता है कि उपलब्ध कराने के लिए प्रमाणीकरण beforeSend()
फ़ंक्शन में बेस 64 एन्कोडेड डेटा का प्रत्यक्ष सम्मिलन है। यदि इसमें शामिल नहीं है, तो कोई प्रगति नहीं हुई है। उपयोगकर्ता नाम और पासवर्ड गुण पूरी तरह से अनदेखा प्रतीत होता है।
beforeSend()
व्यवहार प्रदान किए जाने के साथ, जीईटी कॉल को शामिल डेटा के साथ सकारात्मक प्रतिक्रिया मिलती है। हालांकि, क्योंकि यह एक क्रॉस साइट कॉल है, जीईटी कॉल से पहले एक विकल्प कॉल किया जाता है और हमेशा विफल रहता है, क्योंकि यह beforeSend()
का उपयोग नहीं करता है और इसलिए असफल प्रमाणीकरण के कारण 401 प्रतिक्रिया प्राप्त होती है।
क्या यह एक बेहतर तरीका है कि एक बहुत ही छोटा कॉल होना चाहिए? क्या यह तथ्य होना चाहिए कि विकल्प अनुरोध beforeSend()
फ़ंक्शन प्रोसेसिंग का उपयोग नहीं करते हैं? क्या ऑप्शन चेक को पूरी तरह से अक्षम करने का कोई तरीका है? यह कॉल क्रॉस-साइट नहीं बनाना संभव है, क्योंकि जावास्क्रिप्ट एक ही मशीन पर "क्रॉस-साइट" के रूप में एक अलग पोर्ट नंबर पर विचार करना प्रतीत होता है।
आप से पहले भेजने के लिए और उपयोगकर्ता नाम/पासवर्ड क्षेत्रों की जरूरत नहीं है । मैं आपके $ .ajax फ़ंक्शन से उपयोगकर्ता नाम/पासवर्ड फ़ील्ड हटा दूंगा। –