【问题标题】:sending xml file through XmlHttpRequest通过 XmlHttpRequest 发送 xml 文件
【发布时间】:2020-05-27 03:24:00
【问题描述】:

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

  1. 创建文档
  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);
?>

【问题讨论】:

  • 这能回答你的问题吗? PHP "php://input" vs $_POST
  • thnx 帮忙...恐怕不行,我可以将 text/xml 标头与 file_get_contents 一起使用,但是当我打印 gettype() 时它返回字符串仍然是同样的问题

标签: javascript php xml xmlhttprequest


【解决方案1】:

我可以将 text/xml 标头与 file_get_contents 一起使用

这是正确的做法。

但是当我打印 gettype() 时它返回字符串仍然是同样的问题 –

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

这些是它可以自动处理的唯一 内容类型。它没有自动解析 XML 正文的功能。您必须明确地执行此操作(通过从 STDIN 读取正文,然后将结果字符串传递给 an XML library)。

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多