ตัวอย่าง SOAP ที่ง่ายที่สุด


241

SOAP ตัวอย่างที่ง่ายที่สุดในการใช้ Javascript คืออะไร?

เพื่อให้มีประโยชน์มากที่สุดคำตอบควร:

  • ใช้งานได้ (กล่าวอีกนัยหนึ่งทำงานได้จริง)
  • ส่งอย่างน้อยหนึ่งพารามิเตอร์ที่สามารถตั้งค่าที่อื่นในรหัส
  • ประมวลผลค่าอย่างน้อยหนึ่งค่าที่สามารถอ่านได้จากที่อื่นในรหัส
  • ทำงานกับเบราว์เซอร์ที่ทันสมัยที่สุด
  • มีความชัดเจนและสั้นที่สุดโดยไม่ต้องใช้ห้องสมุดภายนอก

5
ความเรียบง่ายและชัดเจนอาจขัดแย้งกับการไม่ใช้ห้องสมุดภายนอก คุณต้องการเขียน WSDL ของคุณเอง -> ตัวแปลงคลาส JS หรือไม่?
mikemaccana

19
ฉันมีคำถาม: หากฉันเห็นคำถามนี้ว่าเป็นคนแรกที่ฉันคาดหวังว่าจะถูกลดระดับลงด้วยความคิดเห็นเช่น "แสดงรหัสบางส่วนนี่ไม่ใช่" เช่ารหัสผู้ให้เช่า " ไม่มีอะไรเป็นส่วนตัวโทมัส :) แต่ฉันไม่เข้าใจว่าชุมชนตัดสินว่าอะไรดีและไม่ดี
最白目

4
เฮ้ไม่ต้องกังวล ฉันเดาจุดของคำถามคือมีหลายวิธีในการเขียนลูกค้า SOAP โดยใช้ JavaScript หลายคนน่าเกลียดดังนั้นฉันหวังว่าความคิดบางอย่างเกี่ยวกับการทำให้มันสะอาด
Thomas Bratt

@dan เป็นเพราะ 1. คำถามนี้ค่อนข้างเก่ายังมีคำถามพื้นฐานมากมายที่ถามว่าตามธรรมเนียมมี upvotes มากมาย 2. มันอธิบายปัญหาที่ค่อนข้างง่ายดังนั้นจึงมีแนวโน้มที่จะดึงดูดผู้ใช้ใหม่ที่อาจลงคะแนนด้วย หลักการของ "เฮ้ฉันอยากรู้เช่นกัน!" แทนที่จะเป็น "เฮ้คำถามนี้แสดงความพยายามในการวิจัยมันมีประโยชน์และชัดเจน!" เนื่องจากคำถามที่ขาดในความคิดของฉันฉันจึงลงคะแนน ไม่มีส่วนบุคคลเช่นกัน: D
phil294

@ThomasBratt ฉันอาจจะดำเนินการต่อในเมตาดาต้า แต่คำถามประเภทนี้สมควรได้รับโอกาส มันเป็นคำถามที่เหมาะสำหรับห้องสมุดโคตรของการอ้างอิงหรือฐานความรู้ แต่บางทีคำตอบที่ได้รับการยอมรับก็สมควรได้รับสิ่งจูงใจสำหรับงานพิเศษอีกด้วย? ยังไม่มีอะไรได้รับการยอมรับมากไปกว่า SO ดังนั้นมีที่ไหนอีกบ้าง? ดังนั้นแม้พยายามและคิดด้วยความคิดในการสร้างเว็บไซต์เอกสาร - และล้มเหลว ไม่มีอะไรที่จะมาแทนที่ SO ...
YoYo

คำตอบ:


201

นี่คือไคลเอนต์ SOAP JavaScript ที่ง่ายที่สุดที่ฉันสามารถสร้างได้

<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
สิ่งที่เกี่ยวกับการส่ง <soapenv: Header> ฉันพยายามสร้างแท็กส่วนหัวของฉันลงในตัวแปร sr แต่เซิร์ฟเวอร์ได้รับ soapenv ที่ว่างเปล่า: ส่วนหัว
Boiler Bill

สิ่งนี้ได้ผลสำหรับฉัน! (หลังจากแทนที่ SOAP Service URL ด้วยของจริงและปิดข้อ จำกัด ข้ามโดเมนในเบราว์เซอร์ของฉันตามที่ระบุโดย @Prestaul)
Niko Bellic

ฉันกำลังพัฒนาแอพข้ามแพลตฟอร์มใน nativescript สำหรับ android / ios ฉันต้องการใช้บริการเว็บ SOAP กรุณาแนะนำฉันสำหรับเดียวกัน ฉันใช้โค้ดด้านบนสำหรับคำขอ SOAP & ฉันต้องการรูปแบบการตอบกลับ SOAP วิธีจัดการกับการตอบ โปรดตรวจสอบคำถามของฉัน - stackoverflow.com/questions/37745840/…
Onkar Nene

ต้องใช้สิ่งนี้เมื่อเร็ว ๆ นี้เพื่อสนับสนุนรหัสดั้งเดิม พบกับปัญหาที่ส่วนหัวหายไปซึ่งกำลังสร้าง "ContractFilter ไม่ตรงกันที่ EndpointDispatcher" การเพิ่มxmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action');ก่อนxmlhttp.send(sr)แก้ไข
RDRick

80

มีนิสัยใจคอมากมายในวิธีที่เบราว์เซอร์จัดการกับ XMLHttpRequest โค้ด JS นี้จะทำงานในทุกเบราว์เซอร์:
https://github.com/ilinsky/xmlhttprequest

รหัส JS นี้แปลง XML เป็นวัตถุ JavaScript ที่ใช้งานง่าย:
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...

สองตัวเลือกอื่น ๆ :


ฉันควรทำอย่างไรถ้าฉันต้องการส่งซองจดหมายหลายซอง
Ajay Patel

ฉันใช้รหัสข้างต้น แต่ xmlhttp.responseText จะให้ผลลัพธ์เป็น null.can เสมอฉันจะให้ somelinks เพื่อแก้ไขข้อผิดพลาดให้ฉัน
user969275

ลิงก์เมื่อรหัส Google ถูกลบ: github.com/ilinsky/xmlhttprequest
ToastyMallows

48

สิ่งนี้ไม่สามารถทำได้ด้วยจาวาสคริปต์ตรงยกเว้นว่าบริการเว็บนั้นอยู่ในโดเมนเดียวกับเพจของคุณ แก้ไข: ในปี 2008 และใน IE <10 สิ่งนี้ไม่สามารถทำได้ด้วย javascript แบบตรงยกเว้นว่าบริการอยู่ในโดเมนเดียวกับเพจของคุณ

หากบริการบนเว็บอยู่ในโดเมนอื่น [และคุณต้องรองรับ IE <10] คุณจะต้องใช้หน้าพร็อกซีในโดเมนของคุณเองเพื่อดึงผลลัพธ์และส่งคืนให้คุณ หากคุณไม่ต้องการการสนับสนุน IE แบบเก่าคุณจะต้องเพิ่มการรองรับ CORS ในบริการของคุณ ในกรณีใดกรณีหนึ่งคุณควรใช้สิ่งที่ต้องการ lib ที่ timyates แนะนำเพราะคุณไม่ต้องการที่จะแยกวิเคราะห์ผลลัพธ์ด้วยตัวคุณเอง

หากบริการบนเว็บอยู่ในโดเมนของคุณเองอย่าใช้ SOAP ไม่มีเหตุผลที่ดีที่จะทำเช่นนั้น หากบริการเว็บอยู่ในโดเมนของคุณเองให้แก้ไขเพื่อให้สามารถส่งคืน JSON และช่วยตัวคุณเองในการจัดการกับปัญหาทั้งหมดที่มาพร้อมกับสบู่

คำตอบสั้น ๆ คือ: อย่าส่งคำขอ SOAP จาก javascript ใช้บริการเว็บเพื่อขอข้อมูลจากโดเมนอื่นและถ้าคุณทำเช่นนั้นแยกวิเคราะห์ผลลัพธ์ในฝั่งเซิร์ฟเวอร์และส่งกลับในรูปแบบที่เป็นมิตรกับ js


1
จุดประสงค์คือให้เซิร์ฟเวอร์ SOAP แสดงหน้า HTML สำหรับการทดสอบและประเมินผลอย่างง่าย ลูกค้าจะอยู่ในโดเมนเดียวกัน การไม่ใช้ SOAP สำหรับส่วนหน้าดูเหมือนว่าจะเป็นมุมมองที่ยอมรับได้ ความคิดเห็นใด ๆ ว่าเป็นเพราะเหตุใด โปรดเพิ่มคำถามใหม่: stackoverflow.com/questions/127038
Thomas Bratt

1
ไม่มีประเด็นในการตอบคำถามที่นั่น ... ฉันเห็นด้วยกับ Gizmo ทั้งสามประเด็น XML นั้นมีป่องและความท้าทายในการจัดการกับ js ในขณะที่ JSON นั้นกระชับและเป็นภาษาดั้งเดิม
Prestaul

10
อีกครั้ง "ไม่สามารถทำได้": วันนี้ก็สามารถทำได้ด้วย (ส่วนใหญ่) ตรง JavaScript ถ้าลูกค้าสนับสนุนทรัพยากรข้ามแหล่งที่ใช้ร่วมกัน หวังว่าในอีก 3-4 ปีข้างหน้าจะมีวางจำหน่ายทั่วโลก
Constantin

2
@Constantin, CORS จะอนุญาตหากคุณยินดีที่จะรองรับเฉพาะเบราว์เซอร์รุ่นใหม่และหากคุณมีการควบคุมเซิร์ฟเวอร์และสามารถเพิ่มการรองรับ CORS ได้เช่นกัน ที่ถูกกล่าวว่าฉันจะยังคงยืนยันว่าการโทร SOAP ควรทำระหว่างเซิร์ฟเวอร์และลูกค้าควรใช้สิ่งที่เป็นมิตรกับ JS เช่น JSON
Prestaul

1
@NikoBellic ไคลเอ็นต์ที่ใช้เบราว์เซอร์อาจใช้XMLHttpRequestผ่านห้องสมุดเช่น jquery โหนดไคลเอ็นต์จะใช้อย่างอื่น บริการเว็บส่วนใหญ่ใช้ REST เป็นแนวทางในการออกแบบ API แต่มีรูปแบบที่ดีมากมาย ที่สำคัญคือที่นี่ร่างกายร้องขอ / ตอบสนองเป็น JSON เพราะไคลเอนต์จาวาสคริปต์ (เบราว์เซอร์ / โหนด / ที่ใดก็ได้) เข้าใจ JSON โดยกำเนิด
Prestaul

14

คุณสามารถใช้ปลั๊กอิน jquery.soapเพื่อทำงานให้คุณ

สคริปต์นี้ใช้ $ .ajax เพื่อส่ง SOAPEnvelope มันสามารถใช้ XML DOM, สตริง XML หรือ JSON เป็นอินพุตและการตอบสนองสามารถกลับเป็นทั้ง XML DOM, สตริง XML หรือ 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 ไม่ใช่ JavaScript (ดูเหมือนว่า JavaScript)
nnnnnn

2
en.wikipedia.org/wiki/JSON - หมายถึง "JavaScript Object Notation" และในขณะที่ฉันยอมรับว่า JSON เป็นข้อกำหนดไม่ใช่ภาษาและเป็นอย่างนั้น "ไม่ใช่จาวาสคริปต์" คุณต้องยอมรับว่าวิธีการตั้งชื่อทำได้ ง่ายคนสับสน
P. Roe

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>

Hear เป็น JavaScript ที่ดีที่สุดพร้อมบทแนะนำ SOAP พร้อมตัวอย่าง

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


3

ตัวอย่างที่ยอดเยี่ยม (และไคลเอ็นต์ JavaScript SOAP!) ที่นี่: http://plugins.jquery.com/soap/

ตรวจสอบ readme และระวังข้อ จำกัด ของเบราว์เซอร์ที่มาจากเดิม


3

ใช้บริการเว็บ SOAP อย่างง่ายดายด้วย JavaScript -> Listing B

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;
}

สิ่งนี้อาจไม่ตรงตามความต้องการของคุณทั้งหมด แต่เป็นการเริ่มตอบคำถามของคุณอย่างแท้จริง (ฉันสลับXMLHttpRequest ()สำหรับActiveXObject ("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. การโพสต์ข้อความไปยัง url ของเว็บเซอร์วิซโดยใช้ XHR

  4. แยกวิเคราะห์การตอบสนอง 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. นำเสนอผลลัพธ์ให้กับผู้ใช้

แต่มันเป็นเรื่องยุ่งยากโดยไม่มีห้องสมุด JavaScript ภายนอก


9
ไม่ใช่ตัวอย่างของ Javacript
Thomas Bratt

ไม่ใช่แม้แต่ส่วนแรกที่คุณไม่ได้ตอบ - จงใช้งานได้ (อีกนัยหนึ่งก็ใช้งานได้จริง)
shahar eldad

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

Angularjs $ http ฐานห่อในXMLHttpRequest ตราบใดที่ชุดเนื้อหาส่วนหัวรหัสต่อไปนี้จะทำ

"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 ที่ง่ายที่สุดในการใช้ Javascript คืออะไร'

คำตอบนี้เป็นตัวอย่างในสภาพแวดล้อมNode.jsมากกว่าเบราว์เซอร์ (ลองตั้งชื่อสคริปต์ soap-node.js) และเราจะใช้เว็บเซอร์วิส SOAP สาธารณะจาก Europe PMCเป็นตัวอย่างในการรับรายการอ้างอิงของบทความ

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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.