सरलतम सोप उदाहरण


241

जावास्क्रिप्ट का उपयोग करके सबसे सरल SOAP उदाहरण क्या है?

जितना संभव हो उतना उपयोगी होने के लिए, उत्तर होना चाहिए:

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

5
सरल और स्पष्ट होने के नाते बाहरी पुस्तकालय का उपयोग नहीं करने के साथ संघर्ष हो सकता है। क्या आप वास्तव में अपना खुद का WSDL -> JS क्लास कन्वर्टर लिखना चाहते हैं?
मिकमेकाना

19
मेरे पास एक प्रश्न है: अगर मैंने इस प्रश्न को पहले व्यक्ति के रूप में देखा, तो मैं उम्मीद करूंगा कि इसे "कुछ कोड दिखाएं, यह 'किराए का कोडर नहीं है" जैसी टिप्पणियों के साथ अस्वीकृत किया जाएगा। व्यक्तिगत कुछ भी नहीं, थॉमस :) लेकिन मैं यह नहीं समझ सकता कि कैसे समुदाय अच्छे और बुरे का फैसला करता है।
最白目

4
अरे कोई चिंता नहीं। मुझे लगता है कि सवाल का मुद्दा यह है कि जावास्क्रिप्ट का उपयोग करके SOAP क्लाइंट लिखने के बहुत सारे तरीके हैं। उनमें से कई बदसूरत हैं, इसलिए मैं इसे साफ रखने पर कुछ विचारों की उम्मीद कर रहा था।
थॉमस ब्राट

@dan यह इसलिए है क्योंकि 1. यह प्रश्न पुराना है, फिर भी बहुत सारे मौलिक प्रश्न थे जो यह पूछते हैं कि परंपरा के अनुसार कई उत्थान हैं, 2. यह एक सरल समस्या का वर्णन करता है, इसलिए यह संभवतः नए उपयोगकर्ताओं को आकर्षित करता है जो वोट दे सकते हैं "हे मैं चाहता हूँ कि यह भी पता है!" "हे के बजाय, यह प्रश्न अनुसंधान के प्रयासों को दर्शाता है। यह उपयोगी और स्पष्ट है!"। जैसा कि मेरे विचार में इस प्रश्न का अभाव है, मैंने इसे अस्वीकार कर दिया। कुछ भी व्यक्तिगत नहीं: D
phil294

@ThomasBratt I शायद इसे मेटा पर जारी रखेगा, लेकिन उन प्रकार के प्रश्नों के लिए एक मौका है। यह संदर्भ या ज्ञान के आधार के अवर पुस्तकालय के लिए आदर्श प्रश्न है। लेकिन बस शायद स्वीकृत उत्तर भी अतिरिक्त किंवदंतियों के लिए एक प्रोत्साहन के हकदार हैं? अभी भी एसओ की तुलना में अधिक कुछ भी स्वीकार नहीं किया गया है, तो और कहां है? यहां तक ​​कि एसओ ने एक प्रलेखन साइट बनाने के विचार से कोशिश की और खिलवाड़ किया - और असफल रहा। SO को बदलने के लिए कुछ भी नहीं ...
YoYo

जवाबों:


201

यह सबसे सरल जावास्क्रिप्ट सोप क्लाइंट है जिसे मैं बना सकता हूं।

<html>
<head>
    <title>SOAP JavaScript Client Test</title>
    <script type="text/javascript">
        function soap() {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open('POST', 'https://somesoapurl.com/', true);

            // build SOAP request
            var sr =
                '<?xml version="1.0" encoding="utf-8"?>' +
                '<soapenv:Envelope ' + 
                    'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
                    'xmlns:api="http://127.0.0.1/Integrics/Enswitch/API" ' +
                    'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
                    'xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' +
                    '<soapenv:Body>' +
                        '<api:some_api_call soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
                            '<username xsi:type="xsd:string">login_username</username>' +
                            '<password xsi:type="xsd:string">password</password>' +
                        '</api:some_api_call>' +
                    '</soapenv:Body>' +
                '</soapenv:Envelope>';

            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        alert(xmlhttp.responseText);
                        // alert('done. use firebug/console to see network response');
                    }
                }
            }
            // Send the POST request
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            xmlhttp.send(sr);
            // send request
            // ...
        }
    </script>
</head>
<body>
    <form name="Demo" action="" method="post">
        <div>
            <input type="button" value="Soap" onclick="soap();" />
        </div>
    </form>
</body>
</html> <!-- typo -->

2
<साबुननेव: हैडर> भेजने के बारे में क्या? मैंने अपने हेडर टैग को sr वैरिएबल में बनाने की कोशिश की, हालाँकि सर्वर को एक खाली साबुन मिला: हैडर
बॉयलर बिल

यह मेरे लिए काम किया! (SOAP सेवा URL को वास्तविक के साथ बदलने के बाद और मेरे ब्राउज़र पर क्रॉस-डोमेन प्रतिबंध को बंद कर, जैसा कि @Prestaul द्वारा निहित है)
निको बेलिक

मैं एंड्रॉइड / आईओएस के लिए नेटिवस्क्रिप्ट में क्रॉस-प्लेटफॉर्म ऐप विकसित कर रहा हूं। मैं SOAP वेब सेवाओं का उपयोग करना चाहता हूं। कृपया मेरा मार्गदर्शन करें। मैंने SOAP अनुरोध के लिए उपरोक्त कोड का उपयोग किया था और मैं SOAP प्रतिक्रिया प्रारूप चाहता हूं, प्रतिक्रिया को कैसे संभालना है। कृपया मेरे प्रश्न की समीक्षा करें - stackoverflow.com/questions/37745840/…
ओंकार नेने

हाल ही में विरासत कोड का समर्थन करने के लिए इसका उपयोग करना पड़ा। गायब हेडर के साथ एक मुद्दे पर भाग गया जो कि "कॉन्ट्रैक्टफिल्टरचैटर पर कॉन्ट्रैक्टफिल्टर मिसमैच" बना रहा था। इसे ठीक करने xmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action');से पहले जोड़ना xmlhttp.send(sr)
आरडीरिक

80

ब्राउज़र्स XMLHttpRequest को हैंडल करने के तरीके में कई क्विर्क हैं, यह JS कोड सभी ब्राउज़रों में काम करेगा:
https://github.com/ilinsky/xmlhttprequest

यह JS कोड XML को जावास्क्रिप्ट ऑब्जेक्ट का उपयोग करने के लिए आसान में परिवर्तित करता है:
http://www.terracoder.com/index.php/xml-objectifier

आपकी कोई बाहरी लाइब्रेरी आवश्यकता को पूरा करने के लिए ऊपर दिए गए JS कोड को पृष्ठ में शामिल किया जा सकता है।

var symbol = "MSFT"; 
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true);
xmlhttp.onreadystatechange=function() {
 if (xmlhttp.readyState == 4) {
  alert(xmlhttp.responseText);
  // http://www.terracoder.com convert XML to JSON 
  var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML);
  var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text;
  // Result text is escaped XML string, convert string to XML object then convert to JSON object
  json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result));
  alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text); 
 }
}
xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
var xml = '<?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:Body> ' +
     '<GetQuote xmlns="http://www.webserviceX.NET/"> ' +
       '<symbol>' + symbol + '</symbol> ' +
     '</GetQuote> ' +
   '</soap:Body> ' +
 '</soap:Envelope>';
xmlhttp.send(xml);
// ...Include Google and Terracoder JS code here...

दो अन्य विकल्प:


अगर मैं कई लिफाफे को पास करना चाहता हूं तो मुझे क्या करना चाहिए?
अजय पटेल

मैं उपरोक्त कोड का उपयोग कर रहा हूं, लेकिन xmlhttp.responseText हमेशा null.can के रूप में परिणाम देता है। मुझे त्रुटि दूर करने के लिए somelinks प्रदान करता है
user969275

Google कोड निकाले जाने पर लिंक: github.com/ilinsky/xmlhttprequest
ToastyMallows

48

यह सीधे जावास्क्रिप्ट के साथ नहीं किया जा सकता है जब तक कि वेब सेवा आपके पेज के समान डोमेन पर न हो। संपादित करें: 2008 में और IE <10 में यह सीधे जावास्क्रिप्ट के साथ नहीं किया जा सकता है जब तक कि सेवा आपके पृष्ठ के समान डोमेन पर न हो।

यदि वेब सेवा किसी अन्य डोमेन पर है [और आपको IE <10] का समर्थन करना है, तो आपको अपने स्वयं के डोमेन पर एक प्रॉक्सी पृष्ठ का उपयोग करना होगा जो परिणामों को पुनः प्राप्त करेगा और उन्हें आपको लौटा देगा। यदि आपको पुराने IE समर्थन की आवश्यकता नहीं है, तो आपको अपनी सेवा में CORS समर्थन जोड़ने की आवश्यकता है। या तो मामले में, आपको कुछ ऐसे उपयोग करना चाहिए जैसे कि देयता का सुझाव दिया गया है क्योंकि आप परिणामों को खुद को पार्स नहीं करना चाहते हैं।

यदि वेब सेवा आपके स्वयं के डोमेन पर है तो SOAP का उपयोग न करें। ऐसा करने का कोई अच्छा कारण नहीं है। यदि वेब सेवा आपके स्वयं के डोमेन पर है, तो इसे संशोधित करें ताकि यह JSON को वापस कर सके और SOAP के साथ आने वाली सभी परेशानियों से निपटने के लिए अपने आप को बचा सके।

संक्षिप्त उत्तर है: जावास्क्रिप्ट से SOAP अनुरोध न करें। किसी अन्य डोमेन से डेटा का अनुरोध करने के लिए एक वेब सेवा का उपयोग करें, और यदि आप ऐसा करते हैं तो सर्वर-साइड पर परिणाम पार्स करते हैं और उन्हें एक जेएस के अनुकूल रूप में वापस करते हैं।


1
सोप सर्वर को सरल परीक्षण और मूल्यांकन के लिए एक HTML पृष्ठ परोसने का इरादा है। ग्राहक एक ही डोमेन पर होगा। सामने के छोर के लिए SOAP का उपयोग नहीं करना स्वीकृत दृश्य प्रतीत होता है। किसी भी टिप्पणी के रूप में क्यों? कृपया नए प्रश्न में जोड़ें: stackoverflow.com/questions/127038
थॉमस ब्राट

1
वहाँ जवाब देने का कोई मतलब नहीं ... मैं सभी तीन बिंदुओं पर गिज़्मो से सहमत हूँ। XML फूला हुआ है और JSON को संभालने के लिए एक चुनौती है जबकि JSON संक्षिप्त और देशी है।
प्रेस्टुल

10
पुनः "नहीं किया जा सकता है": आज यह (ज्यादातर) सीधे जावास्क्रिप्ट के साथ किया जा सकता है, यदि क्लाइंट क्रॉस-ऑरिजिनल रिसोर्स शेयरिंग का समर्थन करता है । उम्मीद है कि 3-4 वर्षों में यह सार्वभौमिक रूप से उपलब्ध होगा।
कांस्टेंटिन

2
यदि आप केवल नए ब्राउज़रों का समर्थन करने के लिए तैयार हैं और यदि आपके पास सर्वर का नियंत्रण है और वहां भी कॉर्स का समर्थन जोड़ सकते हैं, तो @ कॉन्सटेंटिन, कॉर्स इसकी अनुमति देगा। यह कहा जा रहा है, मैं अभी भी तर्क दूंगा कि SOAP कॉल केवल सर्वरों के बीच की जानी चाहिए और क्लाइंट को JSON जैसे जेएस के अनुकूल कुछ और का उपयोग करना चाहिए।
प्रेस्टाटूल

1
@NikoBellic एक ब्राउज़र-आधारित क्लाइंट XMLHttpRequest, शायद लाइब्रेरी जैसे jquery के माध्यम से उपयोग कर सकता है । एक नोड क्लाइंट कुछ और उपयोग करेगा। अधिकांश वेब सेवाएं REST को अपने एपीआई को डिजाइन करने के लिए एक गाइड के रूप में उपयोग करती हैं, लेकिन कई अच्छे पैटर्न हैं। यहां कुंजी यह है कि अनुरोध / प्रतिक्रिया निकाय JSON हैं क्योंकि जावास्क्रिप्ट क्लाइंट (ब्राउज़र / नोड / जहां भी) जेएसएन को मूल रूप से समझते हैं।
प्रेस्टुलुल

14

आपके लिए काम करने के लिए आप jquery.soap प्लगइन का उपयोग कर सकते हैं ।

यह स्क्रिप्ट SOAPEnvelope भेजने के लिए $ .ajax का उपयोग करती है। यह XML DOM, XML string या JSON को इनपुट के रूप में ले सकता है और प्रतिक्रिया को XML DOM, XML string या JSON के रूप में भी वापस किया जा सकता है।

साइट से उदाहरण का उपयोग:

$.soap({
    url: 'http://my.server.com/soapservices/',
    method: 'helloWorld',

    data: {
        name: 'Remy Blom',
        msg: 'Hi!'
    },

    success: function (soapResponse) {
        // do stuff with soapResponse
        // if you want to have the response as JSON use soapResponse.toJSON();
        // or soapResponse.toString() to get XML string
        // or soapResponse.toXML() to get XML DOM
    },
    error: function (SOAPResponse) {
        // show error
    }
});

8

थॉमस:

JSON को फ्रंट एंड उपयोग के लिए पसंद किया जाता है क्योंकि यह जावास्क्रिप्ट है। इसलिए आपके पास निपटने के लिए कोई XML नहीं है। एसओएपी इस वजह से एक पुस्तकालय का उपयोग किए बिना एक दर्द है। किसी ने SOAPClient का उल्लेख किया, जो एक अच्छा पुस्तकालय है, हमने अपनी परियोजना के लिए इसके साथ शुरुआत की। हालाँकि इसकी कुछ सीमाएँ थीं और हमें इसके बड़े हिस्से को फिर से लिखना पड़ा। यह SOAPjs के रूप में जारी किया गया है और सर्वर से जटिल वस्तुओं को पारित करने का समर्थन करता है, और अन्य डोमेन से सेवाओं का उपभोग करने के लिए कुछ नमूना प्रॉक्सी कोड शामिल करता है।


2
"JSON को फ्रंट एंड उपयोग के लिए पसंद किया जाता है क्योंकि यह जावास्क्रिप्ट है।" - JSON जावास्क्रिप्ट नहीं है । (यह सिर्फ जावास्क्रिप्ट की तरह दिखता है।)
nnnnnn

2
en.wikipedia.org/wiki/JSON - वस्तुतः "जावास्क्रिप्ट ऑब्जेक्ट संकेतन" के लिए खड़ा है, और जब मैं सहमत हूं कि JSON एक विनिर्देश है जो भाषा नहीं है और इसके लिए निश्चित रूप से "नहीं जावास्क्रिप्ट" है तो आपको इस बात से सहमत होना होगा कि इसका नाम जिस तरह से हो सकता है आसानी से लोगों को भ्रमित करते हैं।
पी। रो।

8

क्या किसी ने यह कोशिश की है? https://github.com/doedje/jquery.soap

लागू करने के लिए बहुत आसान लगता है।

उदाहरण:

$.soap({
url: 'http://my.server.com/soapservices/',
method: 'helloWorld',

data: {
    name: 'Remy Blom',
    msg: 'Hi!'
},

success: function (soapResponse) {
    // do stuff with soapResponse
    // if you want to have the response as JSON use soapResponse.toJSON();
    // or soapResponse.toString() to get XML string
    // or soapResponse.toXML() to get XML DOM
},
error: function (SOAPResponse) {
    // show error
}
});

में परिणाम होगा

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <helloWorld>
        <name>Remy Blom</name>
        <msg>Hi!</msg>
    </helloWorld>
  </soap:Body>
</soap:Envelope>

4
<html>
 <head>
    <title>Calling Web Service from jQuery</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#btnCallWebService").click(function (event) {
                var wsUrl = "http://abc.com/services/soap/server1.php";
                var soapRequest ='<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:Body> <getQuote xmlns:impl="http://abc.com/services/soap/server1.php">  <symbol>' + $("#txtName").val() + '</symbol>   </getQuote> </soap:Body></soap:Envelope>';
                               alert(soapRequest)
                $.ajax({
                    type: "POST",
                    url: wsUrl,
                    contentType: "text/xml",
                    dataType: "xml",
                    data: soapRequest,
                    success: processSuccess,
                    error: processError
                });

            });
        });

        function processSuccess(data, status, req) { alert('success');
            if (status == "success")
                $("#response").text($(req.responseXML).find("Result").text());

                alert(req.responseXML);
        }

        function processError(data, status, req) {
        alert('err'+data.state);
            //alert(req.responseText + " " + status);
        } 

    </script>
</head>
<body>
    <h3>
        Calling Web Services with jQuery/AJAX
    </h3>
    Enter your name:
    <input id="txtName" type="text" />
    <input id="btnCallWebService" value="Call web service" type="button" />
    <div id="response" ></div>
</body>
</html>

उदाहरण के साथ SOAP ट्यूटोरियल के साथ सुनना सबसे अच्छा जावास्क्रिप्ट है।

http://www.codeproject.com/Articles/12816/JavaScript-SOAP-Client


3

कुछ बेहतरीन उदाहरण (और रेडी-मेड जावास्क्रिप्ट सोप क्लाइंट!) यहाँ: http://plugins.jquery.com/soap/

रीडमी की जांच करें, और समान-मूल ब्राउज़र प्रतिबंध से सावधान रहें।


3

जावास्क्रिप्ट के साथ आसानी से सोप वेब सेवाओं का उपभोग करें -> लिस्टिंग बी

function fncAddTwoIntegers(a, b)
{
    varoXmlHttp = new XMLHttpRequest();
    oXmlHttp.open("POST",
 "http://localhost/Develop.NET/Home.Develop.WebServices/SimpleService.asmx'",
 false);
    oXmlHttp.setRequestHeader("Content-Type", "text/xml");
    oXmlHttp.setRequestHeader("SOAPAction", "http://tempuri.org/AddTwoIntegers");
    oXmlHttp.send(" \
<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:Body> \
    <AddTwoIntegers xmlns='http://tempuri.org/'> \
      <IntegerOne>" + a + "</IntegerOne> \
      <IntegerTwo>" + b + "</IntegerTwo> \
    </AddTwoIntegers> \
  </soap:Body> \
</soap:Envelope> \
");
    return oXmlHttp.responseXML.selectSingleNode("//AddTwoIntegersResult").text;
}

यह आपकी सभी आवश्यकताओं को पूरा नहीं कर सकता है लेकिन यह वास्तव में आपके प्रश्न का उत्तर देने की शुरुआत है। (मैंने ActiveXObject के लिए XMLHttpRequest () स्विच किया ("MSXML2.XMLHTTP" )।


1

सबसे सरल उदाहरण में निम्नलिखित शामिल होंगे:

  1. उपयोगकर्ता इनपुट प्राप्त करना।
  2. इसी तरह का XML SOAP संदेश लिखना

    <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:Body>
        <GetInfoByZIP xmlns="http://www.webserviceX.NET">
          <USZip>string</USZip>
        </GetInfoByZIP>
      </soap:Body>
    </soap:Envelope>
  3. XHR का उपयोग करके वेबसर्वर url को संदेश पोस्ट करना

  4. इसी तरह की webservice की XML SOAP प्रतिक्रिया को पार्स करना

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <soap:Body>
      <GetInfoByZIPResponse xmlns="http://www.webserviceX.NET">
       <GetInfoByZIPResult>
        <NewDataSet xmlns="">
         <Table>
          <CITY>...</CITY>
          <STATE>...</STATE>
          <ZIP>...</ZIP>
          <AREA_CODE>...</AREA_CODE>
          <TIME_ZONE>...</TIME_ZONE>
         </Table>
        </NewDataSet>
       </GetInfoByZIPResult>
      </GetInfoByZIPResponse>
     </soap:Body>
    </soap:Envelope>
  5. उपयोगकर्ता के लिए परिणाम प्रस्तुत करना।

लेकिन यह बाहरी जावास्क्रिप्ट पुस्तकालयों के बिना बहुत परेशानी है।


9
उदाहरण के लिए नहीं।
थॉमस ब्राट

पहला भाग भी नहीं जिसका आपने उत्तर नहीं दिया - कार्यात्मक हो (दूसरे शब्दों में वास्तव में काम)।
एलाद

0
function SoapQuery(){
  var namespace = "http://tempuri.org/";
  var site = "http://server.com/Service.asmx";
  var xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");
  xmlhttp.setOption(2,  13056 );  /* if use standard proxy */
  var args,fname =  arguments.callee.caller.toString().match(/ ([^\(]+)/)[1]; /*Имя вызвавшей ф-ции*/
  try { args =   arguments.callee.caller.arguments.callee.toString().match(/\(([^\)]+)/)[1].split(",");  
    } catch (e) { args = Array();};
  xmlhttp.open('POST',site,true);  
  var i, ret = "", q = '<?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:Body><'+fname+ ' xmlns="'+namespace+'">';
  for (i=0;i<args.length;i++) q += "<" + args[i] + ">" + arguments.callee.caller.arguments[i] +  "</" + args[i] + ">";
  q +=   '</'+fname+'></soap:Body></soap:Envelope>';
            // Send the POST request
            xmlhttp.setRequestHeader("MessageType","CALL");
            xmlhttp.setRequestHeader("SOAPAction",namespace + fname);
            xmlhttp.setRequestHeader('Content-Type', 'text/xml');
            //WScript.Echo("Запрос XML:" + q);
            xmlhttp.send(q);
     if  (xmlhttp.waitForResponse(5000)) ret = xmlhttp.responseText;
    return ret;
  };





function GetForm(prefix,post_vars){return SoapQuery();};
function SendOrder2(guid,order,fio,phone,mail){return SoapQuery();};

function SendOrder(guid,post_vars){return SoapQuery();};

0

XMLHttpRequest पर Angularjs $ http रैप बेस । जब तक हैडर कंटेंट सेट कोड का पालन करेगा।

"Content-Type": "text/xml; charset=utf-8"

उदाहरण के लिए:

function callSoap(){
var url = "http://www.webservicex.com/stockquote.asmx";
var soapXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET/\"> "+
         "<soapenv:Header/> "+
         "<soapenv:Body> "+
         "<web:GetQuote> "+
         "<web:symbol></web:symbol> "+
         "</web:GetQuote> "+
         "</soapenv:Body> "+
         "</soapenv:Envelope> ";

    return $http({
          url: url,  
          method: "POST",  
          data: soapXml,  
          headers: {  
              "Content-Type": "text/xml; charset=utf-8"
          }  
      })
      .then(callSoapComplete)
      .catch(function(message){
         return message;
      });

    function callSoapComplete(data, status, headers, config) {
        // Convert to JSON Ojbect from xml
        // var x2js = new X2JS();
        // var str2json = x2js.xml_str2json(data.data);
        // return str2json;
        return data.data;

    }

}

0

प्रश्न 'जावास्क्रिप्ट का उपयोग करने का सबसे सरल SOAP उदाहरण क्या है?'

यह उत्तर ब्राउज़र के बजाय Node.js वातावरण में एक उदाहरण है। (स्क्रिप्ट का नाम साबुन-नोड.जेएस रखें) और हम एक लेख के संदर्भ सूची प्राप्त करने के लिए एक उदाहरण के रूप में यूरोप पीएमसी से सार्वजनिक SOAP वेब सेवा का उपयोग करेंगे ।

const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const DOMParser = require('xmldom').DOMParser;

function parseXml(text) {
    let parser = new DOMParser();
    let xmlDoc = parser.parseFromString(text, "text/xml");
    Array.from(xmlDoc.getElementsByTagName("reference")).forEach(function (item) {
        console.log('Title: ', item.childNodes[3].childNodes[0].nodeValue);
    });

}

function soapRequest(url, payload) {
    let xmlhttp = new XMLHttpRequest();
    xmlhttp.open('POST', url, true);

    // build SOAP request
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                parseXml(xmlhttp.responseText);
            }
        }
    }

    // Send the POST request
    xmlhttp.setRequestHeader('Content-Type', 'text/xml');
    xmlhttp.send(payload);
}

soapRequest('https://www.ebi.ac.uk/europepmc/webservices/soap', 
    `<?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header />
    <S:Body>
        <ns4:getReferences xmlns:ns4="http://webservice.cdb.ebi.ac.uk/"
            xmlns:ns2="http://www.scholix.org"
            xmlns:ns3="https://www.europepmc.org/data">
            <id>C7886</id>
            <source>CTX</source>
            <offSet>0</offSet>
            <pageSize>25</pageSize>
            <email>ukpmc-phase3-wp2b---do-not-reply@europepmc.org</email>
        </ns4:getReferences>
    </S:Body>
    </S:Envelope>`);

कोड चलाने से पहले, आपको दो पैकेज इंस्टॉल करने होंगे:

npm install xmlhttprequest
npm install xmldom

अब आप कोड चला सकते हैं:

node soap-node.js

और आप नीचे दिए गए आउटपुट को देखेंगे:

Title:  Perspective: Sustaining the big-data ecosystem.
Title:  Making proteomics data accessible and reusable: current state of proteomics databases and repositories.
Title:  ProteomeXchange provides globally coordinated proteomics data submission and dissemination.
Title:  Toward effective software solutions for big biology.
Title:  The NIH Big Data to Knowledge (BD2K) initiative.
Title:  Database resources of the National Center for Biotechnology Information.
Title:  Europe PMC: a full-text literature database for the life sciences and platform for innovation.
Title:  Bio-ontologies-fast and furious.
Title:  BioPortal: ontologies and integrated data resources at the click of a mouse.
Title:  PubMed related articles: a probabilistic topic-based model for content similarity.
Title:  High-Impact Articles-Citations, Downloads, and Altmetric Score.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.