Send a custom header of soap envelope using jQuery Ajax

.net, ajax, asmx, jquery, soapheader

Solution

`jQuery.ajax()` issues generic HTTP requests for any type of "web service", not just .NET web services. You'll want to add a SOAPAction request header and pass the entire SOAP envelope as POST data:

$.ajax({
    type: 'POST',
    url: servicename + "/" + functionName,
    contentType: 'text/xml; charset=utf-8',
    headers: {
        SOAPAction: 'http://scandihealth.com/iwebservices/HentKommuner'
    },
    data: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><AuthHeader xmlns="http://scandihealth.com/iwebservices/"><PartnerID>string</PartnerID><SubPartnerID>string</SubPartnerID><SubPartnerType>string</SubPartnerType></AuthHeader></soap:Header><soap:Body><HentKommuner xmlns="http://scandihealth.com/iwebservices/" /></soap:Body></soap:Envelope>',
    success: successFn,
    error: errorFn
});

If you're using jQuery < 1.5, you'll need to use `beforeSend` to set the SOAPAction request header.

You can find the documentation for `jQuery.ajax()` at http://api.jquery.com/jQuery.ajax/.

Problem

I am trying to call an asmx service using jQuery Ajax. ``` POST /YderWS.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://scandihealth.com/iwebservices/HentKommuner" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <AuthHeader xmlns="http://scandihealth.com/iwebservices/"> <PartnerID>string</PartnerID> <SubPartnerID>string</SubPartnerID> <SubPartnerType>string</SubPartnerType> </AuthHeader> </soap:Header> <soap:Body> <HentKommuner xmlns="http://scandihealth.com/iwebservices/" /> </soap:Body> </soap:Envelope> ``` Above is the SOAP 1.1 request I need to send to the service. I am using the below call to set the custom soap header. But my request fails. Can anybody debug the below code for me and let me know what I need to do? ``` var authHeader = "<PartnerID>SCTEST001</PartnerID> <SubPartnerID>001</SubPartnerID> <SubPartnerType>S</SubPartnerType>"; //Call the page method $.ajax({ type: "GET", url: servicename + "/" + functionName, beforeSend: function (xhr) { xhr.setRequestHeader('AuthHeader', authHeader); }, success: successFn, error: errorFn }); ``` EDIT *Please let me know if additional information is required to answer this question.*

Original source