通过XmlHttpRequest发送xml文件

时间:2020-05-25 23:30:55

标签: javascript php xml xmlhttprequest

我正在尝试通过 XmlHttpRequest 发送 XML 文件,但是很遗憾,没有任何发送, 当我打印 $ _ POST
它为我提供了一个空数组。 我尝试了两种创建XML的方法

  1. createDocument
  2. XMLstring,然后将FromString解析为xml。

但无济于事。

我认为原因是标题:

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

因为当我用此标头替换它

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

它可以工作,但是它发送字符串而不是xml文件 我知道我可以将xml字符串发送到我的php,然后将其解析为xml文件,但是我不想这样做,我需要直接发送xml文件

即使我将标头更改为text / xml并在php中使用了

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

它返回字符串,所以 我必须使用simplexml_load_string将其转换为对象 这是我的js代码:

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

php代码,非常简单:

I/O -> Input -> Send Keyboard Input to Device

1 个答案:

答案 0 :(得分:1)

我可以在file_get_contents中使用text / xml标头

那是正确的方法。

但是仍然存在相同的问题,当我打印gettype()时会返回字符串–

PHP将自动使用application/x-www-form-urlencoded正文或multipart/form-data正文解析请求,并用数据填充$_POST

那些是唯一内容类型,可以对其进行自动处理。它没有自动解析XML主体的功能。您必须明确地做到这一点(通过从STDIN读取主体,然后将结果字符串传递给an XML library)。