отправка xml файла через XmlHttpRequest - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь отправить файл XML через XmlHttpRequest , но, к сожалению, ничего не отправляется, когда я печатаю $ _ POST
, он дает мне пустой массив . Я пробовал два способа создать XML

  1. createDocument
  2. XMLstring, затем parseFromString до xml.

, но безрезультатно.

Я думаю, причина в заголовке:

xmlhttp.setRequestHeader('Content-Type', 'text/xml');

потому что, когда я заменяю его этим заголовком

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

, он работает, но отправляет строку не xml файл Я знаю, что могу отправить строку xml в свой php, а затем проанализировать ее до xml файла, но я не хочу этого, мне нужно отправить xml файл напрямую

, даже если Я изменил заголовок на text / xml и использовал в php

$rawData = file_get_contents("php://input");
echo gettype ($rawData);

, он возвращает строку, поэтому мне нужно использовать simplexml_load_string, чтобы преобразовать его в объект, это мой js код:

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","http://localhost/dashboard/webservice/SOAP/soapServer/ex.php");
var xmlDoc;
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    xmlDoc = xmlhttp.response;
    console.log(xmlDoc);          
    }
};
//xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader('Content-Type', 'text/xml');

//way1
var xmlString = "<?xml version='1.0'?><root><query><author>John Steinbeck</author></query></root>";
var parser = new DOMParser();
  var xmlDoc = parser.parseFromString(xmlString, "text/xml");

//way2
var doc = document.implementation.createDocument("", "", null);
var peopleElem = doc.createElement("people");
var personElem1 = doc.createElement("person");
personElem1.setAttribute("first-name", "eric");
personElem1.setAttribute("middle-initial", "h");
personElem1.setAttribute("last-name", "jung");
  
xmlhttp.send(xmlDoc);

php код, так просто:

?php
header("Access-Control-Allow-Origin: http://localhost:3000");
var_dump($_POST);
?>

1 Ответ

1 голос
/ 26 мая 2020

Я могу использовать заголовок text / xml с file_get_contents

Это правильный подход.

но это все та же проблема, он возвращает строку когда я печатаю gettype () -

PHP автоматически анализирует запрос с телом application/x-www-form-urlencoded или multipart/form-data и заполняет $_POST данными.

Это только типы содержимого, для которых имеется автоматическая c обработка. В нем нет функций для автоматического анализа тела XML. Вы должны сделать это явно (прочитав тело из STDIN и затем передав полученную строку через an XML библиотеку ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...