2012-03-22 19 views
6

मैं एक स्व-निर्मित एपीआई के लिए उपभोक्ता पर काम कर रहा हूं और प्राधिकरण शीर्षलेख सेट करने के साथ गंभीर कठिनाइयों का सामना कर रहा हूं। मैं अजाक्स अनुरोधों के लिए JQuery का उपयोग कर रहा है, लेकिन 'beforeSend' सब पर काम नहीं करता है (Fiddler का उपयोग कर अनुरोध की जांच के लिए)अजाक्स प्रमाणीकरण अनुरोध शीर्षलेख बार-बार विफल हो जाते हैं

यह मेरा beforeSend कोड है:

$.ajax({ 
    type: "GET", 
    url: url+"/Projects", 
    contentType: "application/json; charset=utf-8", 
    beforeSend: function (req) { 
     req.setRequestHeader("Authorization", AuthBuilder(username, password)); 
    }, 
    success: function (result) { 
     alert("success"); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert("fail"); 
    } 
}); 

खैर अगर जो विफल रहता है आप क्या करते हैं? ajax अनुरोध भेजने के लिए पुराने तरीके से करने के लिए वापस जाओ ... अच्छी तरह से यह या तो काम नहीं करता है ...

यह मेरा नियमित कोड है:

function GET(address, callback, error) { 
Request = getXMLHttpObject(); 
Request.open("GET", url + address, true); 

var base64 = Base64.encode(username + ":" + password); 
alert(base64); 
Request.setRequestHeader("Authorization", "Basic " + base64); 

Request.send(); 
Request.onreadystatechange = function() { 
    //alert(Request.readyState+" code "+Request.status); 
    if (Request.readyState == 4 && Request.status == 200) { 
     callback(jQuery.parseJSON(Request.responseText)); 
    } else if (Request.readyState == 4 && Request.status >= 400) { 
     error(Request.status, Request.statusText); 
    } 
} 
} 

तथ्य यह है कि मैं कर रहा हूँ कोई आपत्ति नहीं है विशेष रूप से जेसन के लिए नहीं पूछना क्योंकि सेवा डिफ़ॉल्ट द्वारा जेसन लौटाती है।

अतिरिक्त जानकारी में:

  • मूल कोई फर्क नहीं पड़ता, सेवा सभी मूल (परीक्षण किया गया है और इस बात की पुष्टि)
  • प्राधिकरण जब (अन्य ग्राहकों में परीक्षण)
  • हेडर द्वारा निर्धारित काम करता है की अनुमति देता है
  • प्राधिकरण हेडर बस नहीं भेजा जाता है
  • AuthBuilder (उपयोगकर्ता नाम, पासवर्ड)) मूल प्रमाणीकरण हेडर सामग्री
  • getXMLHttpObject (के सही स्वरूप देता है) बस कुछ नकल है पेस्ट कोड और

कोई विचार?

उत्तर

1

खैर मुझे पता चला है कि समस्या क्या था। केवल "सामग्री प्रकार" उस में के साथ "पहुंच-नियंत्रण-अनुमति दें-हेडर": स्व-निर्मित सेवा एक वैश्विक हेडर के रूप में ग्राहक को यह वापस भेज दिया।

इस तरह हमारे ग्राहकों के लिए एक उपयोगकर्ता एजेंट (ब्राउज़र) का उपयोग नहीं इन हेडर पर ध्यान नहीं दिया और बस वैसे भी शीर्ष लेख भेजा है। लेकिन ब्राउजर ने अनुरोध को अनुकूलित करने की कोशिश की और कहा, "यह प्राधिकरण हेडर को स्वीकार नहीं करेगा, इसलिए मैं इसे भेजने से पहले इसे काट दूंगा।" इस तरह पैकेज पैकेज छोटा है और सेवा इसे वैसे भी अनुमति नहीं देगी (हालांकि यह किया गया ...)

तो बस एक्सेस कंट्रोल में "प्रमाणीकरण" जोड़ने से सेवा के शीर्षकों के हिस्से को मेरी जावास्क्रिप्ट/JQuery/अजाक्स अनुरोध अनुरोध हेडर सामान्य के रूप में भेजें!

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