JavaScript发送XML数据需用XMLHttpRequest或fetch设置Content-Type为application/xml,并传入格式良好的XML字符串;推荐fetch,注意实体转义与服务端解析配置。
JavaScript 发送 XML 数据,核心是使用 XMLHttpRequest(或 fetch)设置正确的请求头,并将 XML 字符串作为请求体发送。关键点在于:内容类型必须设为 application/xml 或 text/xml,且数据需是格式良好的 XML 字符串。
这是最传统、兼容性最好的方式,适合需要精细控制请求头和状态的场景:
XMLHttpRequest 实例open() 指定请求方法(如 POST)、URL 和是否异步setRequestHeader() 设置 Content-Type: application/xml
send(),传入已构造好的 XML 字符串(不是 DOM 对象,也不是 JSON)示例:
const xmlStr = ``; const xhr = new XMLHttpRequest(); xhr.open('POST', '/api/submit'); xhr.setRequestHeader('Conten 张三 28t-Type', 'application/xml'); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { console.log('响应:', xhr.responseText); } }; xhr.send(xmlStr);
fetch 更简洁,但要注意它不会自动处理 XML 响应;发送时仍需显式设置 Content-Type:
body 传入headers 中指定 'Content-Type': 'application/xml'
response.text() 获取字符串,或 response.xml(部分浏览器支持)解析为 Document示例:
const xmlStr = ''; fetch('/api/process', { method: 'POST', headers: { 'Content-Type': 'application/xml' }, body: xmlStr }) .then(res => res.text()) .then(xmlText => { console.log('服务器返回的 XML:', xmlText); }); - Book
手拼 XML 容易出错,尤其含特殊字符(如 、&、中文)时:
& → &),或使用 DOM API 构造后序列化(见下条)DOMParser + XMLSerializer 组合(安全可靠)简单构造示例(避免手动拼接):
const doc = document.implementation.createDocument('', '', null);
const root = doc.createElement('data');
const nameEl = doc.createElement('name');
nameEl.textContent = '李四&王五'; // 自动转义
root.appendChild(nameEl);
doc.appendChild(root);
const serializer = new XMLSerializer();
const xmlStr = serializer.serializeToString(doc); // 得到标准 XML 字符串
后端需能解析 application/xml 类型的请求体(如 Node.js 的 express-xml-bodyparser,Java Spring 的 @RequestBody 配合 MappingJackson2XmlHttpMessageConverter):
Content-Type 和 Payload 是否正确application/xml 类型的 Content-Type(在 Access-Control-Allow-Headers 中声明)基本上就这些。不复杂但容易忽略 Content-Type 和字符转义,按步骤来基本一次就能通。