2011-06-15 12 views
10

मैं iContact API को एक अनुरोध करने का प्रयास कर रहा हूं जिसके लिए मुझे authentiation (http://developer.icontact.com/documentation/authenticate-requests) के लिए कस्टम हेडर का उपयोग करने की आवश्यकता है। यह मेरा कोड है:jQuery AJAX कस्टम हैडर

$.ajax({ 
     type: "GET", 
     url: "https://app.icontact.com/icp/a/", 
     contentType: "application/json", 
     beforeSend: function(jqXHR, settings){ 
       jqXHR.setRequestHeader("Accept", "application/json"); 
       jqXHR.setRequestHeader("Api-Version", iContact_API_version); 
       jqXHR.setRequestHeader("Api-AppId", iContact_appID); 
       jqXHR.setRequestHeader("Api-Username", iContact_username); 
       jqXHR.setRequestHeader("API-Password", iContact_appPassword);} 
}); 

किसी कारण से अनुरोध नहीं चलता है। हालांकि, जब मैं मैन्युअल रूप से वही अनुरोध करता हूं (क्रोम रीस्ट कंसोल का उपयोग करके) यह ठीक काम करता है। अगर मैं कस्टम हेडर (एपीआई- *) निकालता हूं, तो अनुरोध पूरा हो जाता है लेकिन निश्चित रूप से प्रमाणीकरण विफल रहता है और मैं एक नियमित HTML पृष्ठ वापस लेता हूं।

मैं फ़ायरफ़ॉक्स पर स्विच और अनुरोध जाँच/प्रतिक्रिया हेडर:

अनुरोध:

Host app.icontact.com 
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Origin http://184.72.61.244 
Access-Control-Request-Me... GET 
Access-Control-Request-He... api-appid,api-password,api-username,api-version 

प्रतिक्रिया:

HTTP/1.1 302 Found 
Date: Tue, 14 Jun 2011 23:43:56 GMT 
Server: Apache/2.2.9 (Debian) 
Set-Cookie: intellicontact_phpsess=1c7ca333017b47f46edd893dae584781; path=/; domain=.icontact.com; secure; HttpOnly 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Location: https://app.icontact.com/icp/login/sentry.php?relurl=https%3A%2F%2Fapp.icontact.com%2Ficp%2Fa%2F&sess= 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 20 
Connection: close 
Content-Type: text/html; charset=utf-8 

कोई भी विचार गलत यहाँ क्या हो रहा है?

धन्यवाद!

+0

आप शायद एक विकल्प अनुरोध है, जो देख रहा है गंतव्य होस्ट क्रॉस-डोमेन अनुरोध, [अधिक जानकारी] की अनुमति देता है कि क्या देख रहे हैं (http://stackoverflow.com/questions/1256593/ jQuery-क्यों-am-ए-हो रही-एक-विकल्प-अनुरोध-insted-के-एक-मिल-अनुरोध)।एक वर्कअराउंड JSONP का उपयोग कर रहा है, लेकिन यह कस्टम हेडर का समर्थन नहीं करता है, [यहां क्यों है] (http://stackoverflow.com/questions/3350778/modify-http-headers-for-a-jsonp-request)। आप [cURL] (http://en.wikipedia.org/wiki/CURL) या पसंदों का उपयोग कर समाप्त कर सकते हैं यदि iContact क्रॉस-डोमेन AJAX-अनुरोध या JSONP का समर्थन नहीं करता है। –

+0

[अनुकूलित HTTPHeader फ़ील्ड के साथ JSON पोस्ट] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/7100294/json-post-with- अनुकूलित-httpheader-field) – JAAulde

+0

http://stackoverflow.com/a/14655768/ 1581725 –

उत्तर

0

यह अजीब बात है कि आपको प्रतिक्रिया में 302 (रीडायरेक्शनल) मिल रहा है। क्या आपने समस्या का निवारण करने के लिए अजाक्स फ़ंक्शन के साथ त्रुटि लॉगिंग करने का प्रयास किया है? यहां मैंने जो कुछ इस्तेमाल किया है उसका एक उदाहरण यहां दिया गया है।

console.log(" call back url :"+ callBackURL); 
       $.ajax({ 
        url: callBackURL, 
        type: 'post', //'GET' in your case  
        contentType: 'application/json; charset=utf-8', 
        dataType: 'json' , // explicitly mentioning datatype 
        success: function(json) { 
         console.log(" reponse :"+ json); 

        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
          console.log("error :"+XMLHttpRequest.responseText); 
        } 


       }); 
-1

कृपया यह सुनिश्चित करें कि आप समस्या हल कर सकते हैं। आप इसे केवल करने के लिए जोड़ना चाहते हैं

function FormSubmit() 
    { 
    $.ajax({  
    type: "POST", 
    url: 'index.php', 
    data: $("#form_main").serialize(), 
    async: false }).done(function(data) { 
    $("#Response").hide(); 
    if (isNaN(data)) { 

    dispmsg = "<div class='alert alert-danger' role='alert'>Oops..Something had gone wrong! Please try again!</div>"; 
    $("#assess_me_response").html(dispmsg); setTimeout('ResetForm();',3000); 
    } 
    else { 

    dispmsg = "<div class='alert alert-success' role='alert'>Thank you for sharing the details. Our Consultant will contact you shortly!</div>"; $("#assess_me_response").html(dispmsg); setTimeout('Redirect();',3000); 

    } 
     return true; 
     }); 
    } 
+2

आम तौर पर, उत्तर अधिक उपयोगी होते हैं यदि उनमें कोड का क्या इरादा है, और यह दूसरों को पेश किए बिना समस्या का समाधान क्यों करता है। "इसे आज़माएं" जोड़ना गिनती नहीं है। –

+0

आपका कोड कस्टम हेडर सेटिंग कैसे ठीक है? – Drakes

1

beforeSend हुक तो $.ajaxSetup() लिए ही उपलब्ध है $.ajax() आप बस headers संपत्ति के साथ जा सकते हैं।


आप एक व्यक्ति अनुरोध करने के लिए एक कस्टम हेडर (या हेडर का सेट) जोड़ना चाहते हैं तो बस हेडर संपत्ति जोड़ें:

// Request with custom header 
$.ajax({ 
    url: 'foo/bar', 
    headers: { 'x-my-custom-header': 'some value' } 
}); 

आप चाहते हैं कि डिफ़ॉल्ट शीर्षलेख जोड़ने (या को

$.ajaxSetup({ 
    headers: { 'x-my-custom-header': 'some value' } 
}); 

// Sends your custom header 
$.ajax({ url: 'foo/bar' }); 

// Overwrites the default header with a new header 
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } }); 

यदि आप चाहते हैं कोई ऐसा शीर्ष लेख (या se: हर अनुरोध को हेडर का सेट) तो $.ajaxSetup() का उपयोग प्रत्येक अनुरोध को हेडर) के टी तो $.ajaxSetup() साथ beforeSend हुक का उपयोग करें:

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('x-my-custom-header', 'some value'); 
    } 
}); 

// Sends your custom header 
$.ajax({ url: 'foo/bar' }); 

// Sends both custom headers 
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } }); 

संपादित करें (अधिक जानकारी): एक बात है कि ajaxSetup साथ आप केवल डिफ़ॉल्ट हेडर के एक सेट को परिभाषित कर सकते है के बारे में पता होना करने के लिए और आप केवल एक beforeSend परिभाषित कर सकते हैं। यदि आप ajaxSetup कई बार कॉल करते हैं, तो केवल शीर्षकों का अंतिम सेट भेजा जाएगा और केवल अंतिम कॉल-कॉलबैक निष्पादित होगा।

स्रोत: https://stackoverflow.com/a/14655768/1581725