Ví dụ SOAP đơn giản nhất


241

Ví dụ SOAP đơn giản nhất sử dụng Javascript là gì?

Để hữu ích nhất có thể, câu trả lời nên:

  • Có chức năng (nói cách khác là thực sự làm việc)
  • Gửi ít nhất một tham số có thể được đặt ở nơi khác trong mã
  • Xử lý ít nhất một giá trị kết quả có thể được đọc ở nơi khác trong mã
  • Làm việc với hầu hết các phiên bản trình duyệt hiện đại
  • Càng rõ ràng và càng ngắn càng tốt, không cần sử dụng thư viện bên ngoài

5
Đơn giản và rõ ràng có thể mâu thuẫn với việc không sử dụng thư viện bên ngoài. Bạn có thực sự muốn viết WSDL của riêng mình -> Trình chuyển đổi lớp JS không?
mikemaccana

19
Tôi có một câu hỏi: nếu tôi thấy câu hỏi này là người đầu tiên tôi sẽ mong đợi nó được đánh giá thấp với các bình luận như "hiển thị một số mã, thì đây không phải là" thuê một lập trình viên ". Không có gì cá nhân, Thomas :) Nhưng tôi không thể hiểu làm thế nào cộng đồng quyết định điều gì tốt và xấu.
最 白

4
Này đừng lo lắng. Tôi đoán vấn đề của câu hỏi là có rất nhiều cách viết một ứng dụng khách SOAP bằng JavaScript. Nhiều người trong số họ xấu, vì vậy tôi đã hy vọng một số ý tưởng về việc giữ sạch sẽ.
Thomas Bratt

@dan là bởi vì 1. câu hỏi này khá cũ, vẫn còn rất nhiều câu hỏi cơ bản được hỏi mà theo truyền thống có nhiều upvote, 2. nó mô tả một vấn đề khá đơn giản, vì vậy nó có thể có xu hướng thu hút người dùng mới có thể bỏ phiếu nguyên tắc "hey tôi cũng muốn biết điều đó!" thay vì "hey, câu hỏi này cho thấy nỗ lực nghiên cứu. Nó rất hữu ích và rõ ràng!". Khi câu hỏi thiếu điều này theo ý kiến ​​của tôi, tôi đã đánh giá thấp nó. Không có gì cá nhân cả: D
phil294

@ThomasBratt Tôi có thể sẽ tiếp tục điều này trên meta, nhưng những câu hỏi kiểu đó xứng đáng có cơ hội. Đây là câu hỏi lý tưởng cho một thư viện gốc của tài liệu tham khảo hoặc kiến ​​thức. Nhưng chỉ có thể câu trả lời được chấp nhận cũng xứng đáng nhận được một động lực cho việc làm thêm? Vẫn không có gì được chấp nhận hơn SO, vậy còn nơi nào nữa? Ngay cả SO đã thử và đùa giỡn với ý tưởng xây dựng một trang web tài liệu - và đã thất bại. Không có gì để thay thế SO ...
YoYo

Câu trả lời:


201

Đây là ứng dụng khách SOAP JavaScript đơn giản nhất tôi có thể tạo.

<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
Còn việc gửi <Soapenv: Header> thì sao? Tôi đã thử xây dựng các thẻ tiêu đề của mình thành biến sr, tuy nhiên máy chủ đã nhận được một xà phòng trống: Tiêu đề
nồi hơi

Điều này làm việc cho tôi! (sau khi thay thế URL Dịch vụ SOAP bằng URL thực và tắt các hạn chế tên miền chéo trên trình duyệt của tôi, theo ngụ ý của @Prestaul)
Niko Bellic

Tôi đang phát triển ứng dụng đa nền tảng trong bản gốc cho android / ios. Tôi muốn sử dụng dịch vụ web SOAP. Xin hướng dẫn cho tôi cho cùng. Tôi đã sử dụng mã ở trên cho yêu cầu SOAP và tôi muốn định dạng phản hồi SOAP, cách xử lý phản hồi. Vui lòng xem lại câu hỏi của tôi - stackoverflow.com/questions/37745840/
Kẻ

Phải sử dụng điều này gần đây để hỗ trợ mã kế thừa. Gặp phải một vấn đề với tiêu đề bị thiếu đang tạo ra một "sự không phù hợp của ContractFilter tại EndpointDispatcher". Thêm xmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action');ngay trước khi xmlhttp.send(sr)sửa nó.
RDRick

80

Có nhiều điểm kỳ lạ trong cách trình duyệt xử lý XMLHttpRequest, mã JS này sẽ hoạt động trên tất cả các trình duyệt:
https://github.com/ilinsky/xmlhttprequest

Mã JS này chuyển đổi XML thành các đối tượng JavaScript dễ sử dụng:
http://www.terracoder.com/index.php/xml-objectifier

Mã JS ở trên có thể được bao gồm trong trang để đáp ứng yêu cầu thư viện bên ngoài của bạn.

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...

Hai lựa chọn khác:


Tôi nên làm gì nếu tôi muốn vượt qua nhiều phong bì?
Ajay Patel

Tôi đang sử dụng đoạn mã trên, nhưng xmlhttp.responseText luôn có kết quả là null. Tôi có thể cung cấp cho tôi một số lỗi để khắc phục lỗi
user969275

Liên kết khi mã Google bị xóa: github.com/ilinsky/xmlhttprequest
ToastyMallows

48

Điều này không thể được thực hiện với JavaScript thẳng trừ khi dịch vụ web nằm trên cùng một tên miền với trang của bạn. Chỉnh sửa: Trong năm 2008 và trong IE <10, điều này không thể thực hiện được với javascript thẳng trừ khi dịch vụ nằm trên cùng một tên miền với trang của bạn.

Nếu dịch vụ web nằm trên một tên miền khác [và bạn phải hỗ trợ IE <10] thì bạn sẽ phải sử dụng trang proxy trên tên miền của chính bạn để lấy kết quả và trả lại cho bạn. Nếu bạn không cần hỗ trợ IE cũ thì bạn cần thêm hỗ trợ CORS vào dịch vụ của mình. Trong cả hai trường hợp, bạn nên sử dụng một cái gì đó như lib mà thời gian đề xuất bởi vì bạn không muốn phải phân tích kết quả.

Nếu dịch vụ web nằm trên miền của chính bạn thì đừng sử dụng SOAP. Không có lý do chính đáng để làm như vậy. Nếu dịch vụ web nằm trên tên miền của riêng bạn thì hãy sửa đổi nó để nó có thể trả về JSON và tự cứu mình khỏi những rắc rối khi xử lý tất cả những rắc rối đi kèm với SOAP.

Câu trả lời ngắn gọn là: Đừng tạo yêu cầu SOAP từ javascript. Sử dụng một dịch vụ web để yêu cầu dữ liệu từ một tên miền khác và nếu bạn làm điều đó thì phân tích kết quả ở phía máy chủ và trả lại chúng ở dạng thân thiện với js.


1
Mục đích là để máy chủ SOAP cũng phục vụ một trang HTML để kiểm tra và đánh giá đơn giản. Các khách hàng sẽ ở trên cùng một tên miền. Không sử dụng SOAP cho giao diện người dùng dường như là chế độ xem được chấp nhận. Bất kỳ ý kiến ​​như tại sao? Vui lòng thêm vào câu hỏi mới: stackoverflow.com/questions/127038
Thomas Bratt

1
Không có điểm nào để trả lời ở đó ... Tôi đồng ý với Gizmo trên cả ba điểm. XML bị cồng kềnh và là một thách thức để xử lý với js trong khi JSON ngắn gọn và nguyên gốc.
Prestaul

10
lại "không thể thực hiện được": Ngày nay có thể thực hiện bằng (hầu hết) JavaScript thẳng, nếu máy khách hỗ trợ Chia sẻ tài nguyên nguồn gốc chéo . Hy vọng trong 3-4 năm nữa nó sẽ có mặt trên toàn cầu.
Constantin

2
@Constantin, CORS sẽ cho phép nếu bạn sẵn sàng chỉ hỗ trợ các trình duyệt mới hơn và nếu bạn có quyền kiểm soát máy chủ và cũng có thể thêm hỗ trợ CORS ở đó. Điều đó đang được nói, tôi vẫn sẽ lập luận rằng các cuộc gọi SOAP chỉ nên được thực hiện giữa các máy chủ và máy khách nên sử dụng một cái gì đó thân thiện hơn với JS như JSON.
Prestaul

1
@NikoBellic một khách hàng dựa trên trình duyệt có thể sử dụng XMLHttpRequest, có thể thông qua một thư viện như jquery. Một khách hàng nút sẽ sử dụng một cái gì đó khác. Hầu hết các dịch vụ web sử dụng REST làm hướng dẫn để thiết kế api của họ, nhưng có nhiều mẫu tốt. Chìa khóa ở đây là các cơ quan yêu cầu / phản hồi là JSON vì các máy khách javascript (trình duyệt / nút / bất cứ nơi nào) hiểu JSON nguyên bản.
Prestaul

14

Bạn có thể sử dụng plugin jquery.soap để thực hiện công việc cho bạn.

Tập lệnh này sử dụng $ .ajax để gửi SOAPEnvel. Nó có thể lấy XML DOM, chuỗi XML hoặc JSON làm đầu vào và phản hồi có thể được trả về dưới dạng XML DOM, chuỗi XML hoặc JSON.

Ví dụ sử dụng từ trang web:

$.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

Thomas:

JSON được ưa thích để sử dụng giao diện người dùng vì nó là javascript. Do đó, bạn không có XML để giải quyết. SOAP là một nỗi đau mà không sử dụng một thư viện vì điều này. Ai đó đã đề cập đến SOAPClient, một thư viện tốt, chúng tôi đã bắt đầu với nó cho dự án của chúng tôi. Tuy nhiên nó có một số hạn chế và chúng tôi đã phải viết lại những phần lớn của nó. Nó được phát hành dưới dạng SOAPjs và hỗ trợ chuyển các đối tượng phức tạp đến máy chủ và bao gồm một số mã proxy mẫu để sử dụng dịch vụ từ các miền khác.


2
"JSON được ưa thích để sử dụng giao diện người dùng vì nó là javascript." - JSON không phải là JavaScript. (Nó trông giống như JavaScript.)
nnnnnn

2
vi.wikipedia.org/wiki/JSON - Nghĩa đen là "Ký hiệu đối tượng JavaScript" và trong khi tôi đồng ý rằng JSON là một đặc tả không phải là ngôn ngữ và có quyết định "không phải javascript", bạn phải đồng ý rằng cách nó được đặt tên có thể mọi người dễ nhầm lẫn.
P. Roe

8

Có ai đã thử điều này? https://github.com/doedje/jquery.soap

Có vẻ rất dễ thực hiện.

Thí dụ:

$.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
}
});

sẽ cho kết quả

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

Nghe là JavaScript tốt nhất với hướng dẫn SOAP với ví dụ.

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


3

Một số ví dụ tuyệt vời (và ứng dụng khách SOAP JavaScript được tạo sẵn!) Tại đây: http://plugins.jquery.com/soap/

Kiểm tra readme và coi chừng hạn chế trình duyệt cùng nguồn gốc.


3

Dễ dàng sử dụng các dịch vụ Web SOAP bằng JavaScript -> Liệt kê 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;
}

Điều này có thể không đáp ứng tất cả các yêu cầu của bạn nhưng nó là một khởi đầu để thực sự trả lời câu hỏi của bạn. (Tôi đã chuyển XMLHttpRequest () cho ActiveXObject ("MSXML2.XMLHTTP") ).


1

Ví dụ đơn giản nhất sẽ bao gồm:

  1. Bắt người dùng nhập liệu.
  2. Soạn tin nhắn SOAP XML tương tự như thế này

    <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. Gửi tin nhắn đến url dịch vụ web bằng XHR

  4. Phân tích phản hồi XML SOAP của webservice tương tự như thế này

    <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. Trình bày kết quả cho người dùng.

Nhưng đó là rất nhiều rắc rối mà không có thư viện JavaScript bên ngoài.


9
Không phải là một ví dụ Javacript.
Thomas Bratt

Ngay cả phần đầu tiên bạn không trả lời - Hãy hoạt động (nói cách khác là thực sự hoạt động).
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 gói cơ sở trên XMLHttpRequest . Miễn là tại nội dung tiêu đề, bộ mã sau đây sẽ làm.

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

Ví dụ:

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

Câu hỏi là 'Ví dụ SOAP đơn giản nhất sử dụng Javascript là gì?'

Câu trả lời này là một ví dụ trong môi trường Node.js , chứ không phải là một trình duyệt. (Hãy đặt tên cho tập lệnh xà phòng-node.js) Và chúng tôi sẽ sử dụng dịch vụ web SOAP công cộng từ Châu Âu PMC làm ví dụ để lấy danh sách tham khảo của một bài viết.

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>`);

Trước khi chạy mã, bạn cần cài đặt hai gói:

npm install xmlhttprequest
npm install xmldom

Bây giờ bạn có thể chạy mã:

node soap-node.js

Và bạn sẽ thấy đầu ra như dưới đây:

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.