Самый простой пример SOAP

Каков самый простой пример SOAP с использованием Javascript?

Чтобы быть максимально полезным, ответ должен:

  • Быть функциональным (другими словами, действительно работать)
  • Отправьте хотя бы один параметр, который можно установить в другом месте кода.
  • Обработайте хотя бы одно значение результата, которое можно прочитать в другом месте кода.
  • Работа с большинством современных версий браузеров
  • Быть максимально понятным и кратким, без использования внешней библиотеки

person Thomas Bratt    schedule 23.09.2008    source источник
comment
Быть простым и понятным может противоречить отказу от использования внешней библиотеки. Вы действительно хотите написать свой собственный преобразователь классов WSDL → JS?   -  person mikemaccana    schedule 28.01.2011
comment
У меня есть вопрос: если бы я увидел этот вопрос от первого лица, я бы ожидал, что за него проголосуют с комментариями типа «покажи какой-нибудь код», это не «аренда кодера». Ничего личного, Томас :) Но я не могу понять, как сообщество решает, что хорошо, а что плохо.   -  person 最白目    schedule 30.01.2012
comment
Эй, не беспокойся. Я предполагаю, что суть вопроса в том, что существует множество способов написать клиент SOAP с использованием JavaScript. Многие из них уродливы, поэтому я надеялся найти какие-нибудь идеи, как содержать их в чистоте.   -  person Thomas Bratt    schedule 14.02.2012
comment
@dan это потому, что 1. этот вопрос довольно старый, все еще было задано много фундаментальных вопросов, которые по традиции имеют много голосов, 2. он описывает довольно простую проблему, поэтому, вероятно, имеет тенденцию привлекать новых пользователей, которые могли бы проголосовать Принцип Эй, я тоже хочу это знать! вместо «привет» этот вопрос показывает исследовательские усилия. полезно и понятно!. Поскольку, на мой взгляд, в вопросе этого не хватает, я проголосовал за него. Тоже ничего личного :D   -  person phil294    schedule 07.02.2017
comment
@ThomasBratt Я, вероятно, продолжу это в мете, но такие вопросы заслуживают шанса. Это идеальный вопрос для справочной библиотеки или базы знаний. Но, может быть, принятый ответ также заслуживает стимула для дополнительной беготни? Ничего более принятого, чем ТАК, до сих пор нет, так где же еще? Даже SO пытался и поиграл с идеей создания сайта документации - и потерпел неудачу. Нечем заменить ТАК...   -  person YoYo    schedule 13.05.2018


Ответы (12)


Это самый простой клиент 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 -->
person stackoverflow128    schedule 09.07.2012
comment
Как насчет отправки ‹soapenv:Header›? Я попытался встроить теги заголовков в переменную sr, однако сервер получил пустой soapenv:Header. - person Boiler Bill; 06.08.2013
comment
Это сработало для меня! (после замены URL-адреса службы SOAP на реальный и отключения междоменных ограничений в моем браузере, как подразумевает @Prestaul) - person Niko Bellic; 09.12.2014
comment
Я разрабатываю кроссплатформенное приложение на родном языке для Android/ios. Я хочу использовать веб-службы SOAP. Пожалуйста, направьте меня к тому же. Я использовал приведенный выше код для запроса SOAP, и мне нужен формат ответа SOAP, как обрабатывать ответ. Пожалуйста, просмотрите мой вопрос - stackoverflow.com/questions/37745840/ - person Onkar Nene; 10.06.2016
comment
Недавно пришлось использовать это для поддержки устаревшего кода. Наткнулся на проблему с отсутствующим заголовком, который создавал несоответствие ContractFilter в EndpointDispatcher. Добавление xmlhttp.setRequestHeader('SOAPAction', 'http://myurl.com/action'); непосредственно перед xmlhttp.send(sr) исправило это. - person Rickchip; 16.10.2019
comment
@Rickchip, здесь более общий способ решения вашей проблемы: заголовки можно добавить, вызвав setRequestHeader() при необходимости. - person Timo; 19.07.2021

Есть много особенностей в том, как браузеры обрабатывают 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...

Два других варианта:

person Chris Stuart    schedule 08.11.2009
comment
что мне делать, если я хочу передать несколько конвертов? - person Ajay Patel; 03.08.2011
comment
я использую приведенный выше код, но xmlhttp.responseText всегда приводит к нулю. Можете ли вы предоставить мне несколько ссылок, чтобы преодолеть ошибку - person user969275; 19.11.2012
comment
Ссылка на удаление кода Google: https://github.com/ilinsky/xmlhttprequest - person ToastyMallows; 18.05.2015

Это невозможно сделать с помощью обычного JavaScript, если только веб-служба не находится в том же домене, что и ваша страница. Изменить: в 2008 и в IE10 это невозможно сделать с помощью прямого JavaScript, если служба не в том же домене, что и ваша страница.

Если веб-служба находится в другом домене [и вы должны поддерживать IE‹10], вам придется использовать прокси-страницу в своем собственном домене, которая будет извлекать результаты и возвращать их вам. Если вам не нужна старая поддержка IE, вам нужно добавить поддержку CORS в свой сервис. В любом случае вы должны использовать что-то вроде библиотеки, которую предложил timyates, потому что вы не хотите самостоятельно анализировать результаты.

Если веб-служба находится в вашем собственном домене, не используйте SOAP. Для этого нет веских причин. Если веб-служба находится в вашем собственном домене, измените ее, чтобы она могла возвращать JSON, и избавьте себя от проблем, связанных со всеми проблемами, связанными с SOAP.

Короткий ответ: не делайте запросы SOAP из javascript. Используйте веб-службу для запроса данных из другого домена, и если вы это сделаете, проанализируйте результаты на стороне сервера и верните их в удобной для js форме.

person Prestaul    schedule 24.09.2008
comment
Намерение состоит в том, чтобы сервер SOAP также обслуживал HTML-страницу для простого тестирования и оценки. Клиент будет в том же домене. Неиспользование SOAP для внешнего интерфейса кажется общепринятым. Есть комментарии почему? Пожалуйста, добавьте к новому вопросу: stackoverflow.com/questions/127038 - person Thomas Bratt; 24.09.2008
comment
Нет смысла отвечать там... Я согласен с Гизмо по всем трем пунктам. XML раздут и с ним сложно справиться с помощью js, в то время как JSON лаконичен и нативен. - person Prestaul; 24.09.2008
comment
Это невозможно сделать: сегодня это можно сделать с помощью (в основном) прямого JavaScript, если клиент поддерживает Cross- Совместное использование ресурсов Origin. Надеюсь, что через 3-4 года он станет общедоступным. - person Constantin; 06.10.2010
comment
@Constantin, CORS разрешит это, если вы готовы поддерживать только более новые браузеры и если у вас есть контроль над сервером и вы также можете добавить туда поддержку CORS. При этом я по-прежнему считаю, что вызовы SOAP должны выполняться только между серверами, а клиент должен использовать что-то более дружественное к JS, например JSON. - person Prestaul; 07.01.2014
comment
Отличный совет! Какой протокол должен использовать клиент JS для связи с сервером (для получения JSON)? Если не SOAP, то RESTful? Он по-прежнему использует объект XMLHttpRequest() на стороне клиента? - person Niko Bellic; 09.12.2014
comment
@NikoBellic клиент на основе браузера может использовать XMLHttpRequest, возможно, через библиотеку, такую ​​​​как jquery. Клиент узла будет использовать что-то еще. Большинство веб-сервисов используют REST в качестве руководства для разработки своего API, но есть много хороших шаблонов. Ключевым моментом здесь является то, что тела запроса/ответа представляют собой JSON, потому что клиенты javascript (браузер/узел/где угодно) изначально понимают JSON. - person Prestaul; 10.12.2014
comment
-1, так как это не отвечает на вопрос. Как насчет варианта использования стороннего приложения в вашем домене, которое вы не можете изменить для возврата JSON? - person ToastyMallows; 18.05.2015
comment
@ToastyMallows, за абзац до этой цитаты я ответил на ваш вопрос, сказав, что сторонние API должны быть проксированы через ваш собственный API. SOAP является сложным и раздутым и создает междоменные проблемы. Лучше создать свой собственный спокойный API, который вызывает прокси. - person Prestaul; 19.05.2015

Вы можете использовать плагин 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
    }
});
person Yaakov Ellis    schedule 13.11.2014

Кто-нибудь пробовал это? 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>
person geekasso    schedule 23.09.2015

Томас:

JSON предпочтительнее для внешнего интерфейса, потому что у нас есть простой поиск. Поэтому у вас нет XML для работы. SOAP - это боль без использования библиотеки из-за этого. Кто-то упомянул SOAPClient, хорошую библиотеку, мы начали с нее наш проект. Однако у него были некоторые ограничения, и нам пришлось переписать большие его части. Он был выпущен как SOAPjs и поддерживает передачу сложных объектов на сервер, а также включает пример прокси-кода для потреблять услуги из других доменов.

person Richard June    schedule 26.10.2009
comment
JSON предпочтительнее для внешнего интерфейса, потому что это JavaScript. - JSON не JavaScript. (Это просто похоже на JavaScript.) - person nnnnnn; 23.06.2016
comment
en.wikipedia.org/wiki/JSON — буквально обозначает нотацию объектов JavaScript, а Я согласен с тем, что JSON - это спецификация, а не язык, и поэтому он определенно не является javascript, вы должны согласиться с тем, что его название может легко запутать людей. - person P. Roe; 25.08.2016
comment
JSON предпочтительнее для внешнего интерфейса, потому что это javascript. Пожалуйста, удалите это, оно распространяет ложную информацию: timelessrepo.com/json-isnt-a-javascript-subset - person Martin Konecny; 09.08.2020

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

Слушайте лучший JavaScript с учебником по SOAP с примером.

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

person Hkachhia    schedule 11.05.2013

Простое использование веб-служб SOAP с помощью JavaScript -> Список 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")).

person user423430    schedule 17.09.2010

Несколько замечательных примеров (и готовый клиент SOAP для JavaScript!) здесь: http://plugins.jquery.com/soap/

Ознакомьтесь с файлом readme и остерегайтесь ограничения браузера одного и того же происхождения.

person kmiklas    schedule 04.02.2015

Вопрос: «Каков самый простой пример 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>[email protected]</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.
person Yuci    schedule 04.04.2018
comment
Это сработало для меня, но лично я предпочитаю использовать axios. let xlms = ‹?xml version=1.0 encoding=UTF-8?› ‹S:Envelope xmlns:S=schemas.xmlsoap.org/soap/envelope› ‹S:Header /› ‹S:Body› ... ‹/S:Body› ‹/S:Envelope› axios .post('ebi.ac.uk/europepmc/webservices/soap', xmls, { заголовки: { ' Content-Type': 'text/xml' } }) .then(res =› { console.log(res); }) .catch(err =› { console.log(err); }); - person otoloye; 06.07.2020

Самый простой пример будет состоять из:

  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.

person Constantin    schedule 24.09.2008
comment
Даже на первую часть вы не ответили - Быть функциональным (другими словами действительно работать). - person shahar eldad; 25.12.2019

Основание 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;

    }

}
person ChokYeeFan    schedule 22.08.2016