Как отправить тег XML как параметр в запросе AJAX? - PullRequest
1 голос
/ 12 июля 2019

У меня проблема с отправкой тега XML в качестве параметра в запросе Ajax

Сначала я попытался отправить его в виде строки, но запрос завершился неудачно, поскольку кодировка тегов ajax в "& lt; Id & lt; 16385 & lt; / Id & gt;", , поэтому я преобразовал его в xmlDoc, используя jquery, и запрос не выполнен.Вот пример моего кода, также вы найдете полезную нагрузку запроса ниже.

let id='<Id>16385</Id>';

  xmlDoc = $.parseXML( id );
  $xml = $( xmlDoc );
  id = $xml.find( "Id" )[0];
  let obj={
    method: "ReadMOD_SYS_OC_entity_unit",
    namespace:
      "http://schemas/comassetegOrganizationChart/MOD_SYS_OC_entity_unit/operations",
    param :{
      "MOD_SYS_OC_entity_unit-id":id,
       MOD_SYS_OC_entity_Name:"Test"
    } 
  }
  cordys.cordysAjax(obj.method,obj.namespace,obj.param).done(function(response) {
      console.log(response);
  });

function cordysAjax(method,namespace,par) {
    return $.cordys.ajax({
      method: method,
      namespace:namespace,
      parameters: par,
      type: 'POST',
      contentType: "xml"
    });
}


**when sending the parameter as string**

 <SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'><SOAP:Body><ReadMOD_SYS_OC_entity_unit xmlns='http://schemas/comassetegOrganizationChart/MOD_SYS_OC_entity_unit/operations' ><MOD_SYS_OC_entity_unit-id>&'lt;Id&gt;16385&'lt;/Id&'gt;</MOD_SYS_OC_entity_unit-id><MOD_SYS_OC_entity_Name>Test</MOD_SYS_OC_entity_Name></ReadMOD_SYS_OC_entity_unit></SOAP:Body></SOAP:Envelope>

 **When sending the parameter as XML**

    <SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'><SOAP:Body><ReadMOD_SYS_OC_entity_unit xmlns='http://schemas/comassetegOrganizationChart/MOD_SYS_OC_entity_unit/operations' ><MOD_SYS_OC_entity_unit-id/><MOD_SYS_OC_entity_Name>Test</MOD_SYS_OC_entity_Name></ReadMOD_SYS_OC_entity_unit></SOAP:Body></SOAP:Envelope>

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Ответ: мне не нужно отправлять значение первого параметра в виде xml-тега, например «16385», правильный ответ:

 param :{
      "MOD_SYS_OC_entity_unit-id":{Id:16385},
       MOD_SYS_OC_entity_Name:"Test"
    } 

Ajax отформатирует полезную нагрузку запроса следующим образом

<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP:Body>
    <ReadMOD_SYS_OC_entity_unit xmlns='http://schemas/comassetegOrganizationChart/MOD_SYS_OC_entity_unit/operations' >
        <MOD_SYS_OC_entity_unit-id>
            <Id>16385</Id>
        </MOD_SYS_OC_entity_unit-id>
    </ReadMOD_SYS_OC_entity_unit>
</SOAP:Body>

0 голосов
/ 12 июля 2019

XML предоставляет раздел CDATA для хранения строк, которые могут содержать зарезервированные символы

<![CDATA[<Id>16385</Id>]]>

Ваш XML может быть

<?xml version="1.0"?>
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP:Body>
    <ReadMOD_SYS_OC_entity_unit xmlns="http://schemas/comassetegOrganizationChart/MOD_SYS_OC_entity_unit/operations">
      <MOD_SYS_OC_entity_unit-id><![CDATA[<Id>16385</Id>]]></MOD_SYS_OC_entity_unit-id>
      <MOD_SYS_OC_entity_Name>Test</MOD_SYS_OC_entity_Name>
    </ReadMOD_SYS_OC_entity_unit>
  </SOAP:Body>
</SOAP:Envelope>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...