2011-08-17 10 views
28

मैं कुछ कोड है कि अंततः एक API कॉल का हिस्सा होगा विरासत में मिला है। मौजूदा कोड के आधार पर, कॉल एक access_token के साथ JSON कोड पुनर्प्राप्त करने के लिए एक पोस्ट है। हालांकि यह सामान्य रूप से सरल होगा और हर दूसरे एपीआई की तरह, इस कोड के लिए क्लाइंट गुप्त के लिए एक अनुकूलित httpheader फ़ील्ड होना आवश्यक है।JSON पोस्ट के साथ स्वनिर्धारित HTTPHeader फील्ड

मैं URLRequest, आदि के साथ उद्देश्य सी में यह काम कर रहा था, लेकिन अब है कि मैं एक वेब घटक के लिए कॉल बनाने हूँ, मैं रोडब्लॉक की है।

मैं शीर्षक में एक HTTP-समतुल्य के साथ एक सुंदर मानक jQuery पद

 $.post('https://url.com', 
     {access_token:'XXXXXXXXXXXXXXXXXXX', 
     function(data){ 
      console.info(data); 
     }, 'json'); 

उपयोग कर रहा हूँ। लेकिन पोस्ट डेटा को कभी भी पुनर्प्राप्त नहीं करता है और सर्वर स्वयं को मान्यता नहीं देता है कि कोई भी कॉल किया गया था (यहां तक ​​कि अधूरा भी)।

मैं इस कोड स्क्रैप और फिर से प्रारंभ करना पड़ सकता है, लेकिन किसी को भी करने से पहले इस समस्या का सामना किया है, किसी भी अंतर्दृष्टि प्रदान करें।

उत्तर

95

क्या आप पोस्ट में सिंटेक्स त्रुटि है, लेकिन यह कोई फर्क नहीं आप $.post() के माध्यम से HTTP हेडर पारित नहीं हो सकता के रूप में आता है।

बशर्ते आप jQuery संस्करण> = 1.5 पर हैं, $.ajax() करने के लिए स्विच और headers (docs) विकल्प गुजरती हैं। (आप jQuery के एक पुराने संस्करण पर हैं, तो मैं तुम्हें दिखाता हूँ कैसे beforeSend विकल्प के माध्यम से यह करने के लिए।)

$.ajax({ 
    url: 'https://url.com', 
    type: 'post', 
    data: { 
     access_token: 'XXXXXXXXXXXXXXXXXXX' 
    }, 
    headers: { 
     Header_Name_One: 'Header Value One', //If your header name has spaces or any other char not appropriate 
     "Header Name Two": 'Header Value Two' //for object property name, use quoted notation shown in second 
    }, 
    dataType: 'json', 
    success: function (data) { 
     console.info(data); 
    } 
}); 
+0

बहुत बहुत शुक्रिया! आपने मुझे निराशा के घंटे बचाए। अब, वस्तु सफारी में खींची जा रही है, लेकिन फ़ायरफ़ॉक्स या क्रोम में नहीं। क्या यह एक ज्ञात, संबंधित समस्या है? यदि ऐसा है, तो मैं आपकी अंतर्दृष्टि से प्यार करूंगा। यदि नहीं, तो मैं इसे समझूंगा। – Izzy

+0

जब क्रोम और फ़ायरफ़ॉक्स का उपयोग कर, क्या आप (डेवलपर उपकरण या Firebug के माध्यम से) देख पा रहे हैं सर्वर के लिए भेजा जा रहा है, और क्या आप वापस आ देखते हैं? यह देखने के लिए कि क्या अनुरोध आने और उचित है, सर्वर पर आपके पास क्या डिबगिंग है? – JAAulde

+0

फ़ायरबग में कोई त्रुटि नहीं दिखाई देती है, लेकिन कोई वापसी नहीं है। फ़ायरफ़ॉक्स वेब कंसोल में मैं इसे देखता हूं: 'विकल्प https: // [url.com] [HTTP/1.1 200 ठीक 441ms]' और क्रोम डेवलपर टूल में मैं इसे देखता हूं: XMLHttpRequest 'https://url.com' लोड नहीं कर सकता है। एक्सेस-कंट्रोल-ऑब्जेक्ट-ऑरिजन द्वारा मूल नल की अनुमति नहीं है। ' सर्वर दिखाता है कि एक अनुरोध आया था। अगर अनुरोध अनुचित था तो यह एक त्रुटि संदेश लॉग करेगा। – Izzy

0

मैंने कोशिश के रूप में आप का उल्लेख किया है, लेकिन केवल पहले पैरामीटर के माध्यम से जा रहा है और आराम सब कर रहे हैं है सर्वर में undefined के रूप में दिखाई दे रहा है। मैं हेडर के हिस्से के रूप में JSONWebToken पास कर रहा हूं।

.ajax({ 
    url: 'api/outletadd', 
    type: 'post', 
    data: { outletname:outletname , addressA:addressA , addressB:addressB, city:city , postcode:postcode , state:state , country:country , menuid:menuid }, 
    headers: { 
     authorization: storedJWT 
    }, 
    dataType: 'json', 
    success: function (data){ 
     alert("Outlet Created"); 
    }, 
    error: function (data){ 
     alert("Outlet Creation Failed, please try again.");   
    } 

    }); 
5

एक() के रूप में सामान्य कॉल .post उपयोग करने के लिए() तो इस jQuery

$.ajaxSetup({ 
    headers: { 
     'Content-Type': 'application/json', 
     'Accept': 'application/json' 
    } 
}); 

फिर अपने .post बनाने के साथ किए गए सभी भविष्य के अनुरोध के लिए हेडर सेट हो जाएगा चाहता है।

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