You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax发送XML至相机时编码异常及Payload异常问题求助

解决Ajax发送原始XML数据的问题

你的问题核心在于jQuery对Ajax请求数据的默认处理逻辑,我来帮你拆解并解决:

问题根源

  1. 错误的数据包装方式:你把XML字符串放在{ data: dataString }对象里,jQuery默认会把这个对象序列化成application/x-www-form-urlencoded格式的表单数据——这就导致XML里的空格被转成+,完全破坏了XML的结构,相机自然无法识别。
  2. processData的误用:当你设置processData: false但仍然传对象时,jQuery不知道如何处理这个对象作为原始请求体,所以发送的内容完全不是你预期的XML字符串,才会出现Payload长度异常的情况。

修正后的代码

直接传入XML字符串,同时关闭jQuery的数据处理逻辑,就能让请求体和你生成的字符串完全一致:

$.ajax({
    url: target,
    type: 'PUT',
    contentType: "application/xml",
    data: dataString, // 直接传递生成好的XML字符串,不要用对象包装
    processData: false, // 禁止jQuery自动编码数据,保留原始字符串
    success: function () { 
        console.log("XML数据发送成功");
    },
    error: function(xhr, status, err) {
        console.error("发送失败:", err);
    }
});

关键细节说明

  • processData: false:这个参数告诉jQuery不要把你传入的data当成表单数据去编码,直接原样发送,这是确保原始XML不被篡改的核心。
  • contentType设置:保持application/xml或者如果相机更兼容text/xml的话也可以试试,这个参数告诉相机你发送的内容类型是XML。
  • 验证方法:发送请求前,打开浏览器开发者工具的「Network」标签,找到这个PUT请求,查看「Payload」部分,确认内容和你生成的XML字符串完全一致——如果一致,相机就能正常接收了。

内容的提问来源于stack exchange,提问作者SinisterMJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:35:39