如何将PHP SOAP脚本转换为JavaScript?请求失败问题求助
修正后的jQuery SOAP请求方案
关键错误梳理
- 参数映射错误:原PHP中的
location是SOAP服务的实际请求地址,对应jquery.soap的url参数;uri是SOAP命名空间,对应namespace参数,你之前搞反了这两个参数导致请求发错地址。 - 数据结构错误:
stock_qty_array需要传递两个独立参数(API密钥、库存ID数组),不是你写的嵌套结构。 - 压缩配置错误:jquery.soap没有直接的
compression参数,需要通过请求头设置GZIP压缩规则。
修正后的代码
function soap() { $.soap({ // 对应PHP里的location:SOAP服务的实际请求地址 url: 'https://soap.somedomain.co.uk/edi/soapsr.pl', // 对应PHP里的uri:SOAP命名空间 namespace: 'https://soap.somedomain.co.uk/StockQuery', // 调用的方法名,和PHP中的stock_qty_array完全一致 method: 'stock_qty_array', // 设置GZIP压缩请求头,对应PHP的压缩配置 headers: { 'Accept-Encoding': 'gzip, deflate' }, // 构造和PHP一致的参数结构 data: { // 第一个参数:API密钥,需和服务端期望的参数名匹配 api_key: 'abc1234567890', // 第二个参数:库存ID数组,保持原PHP的数组内容 stock_ids: [1,6,15,16,167,169,170,171,172,173,175,176,5177,5178,5179,5180,5181] }, success: function (soapResponse) { console.dir(soapResponse.toJSON()); // 转JSON格式方便查看返回结果 }, error: function (error) { console.dir(error); } }); }
额外注意事项
- 确认服务端期望的参数名是否和代码中的
api_key、stock_ids一致,如果服务端定义的参数名不同,需要对应修改。 - 如果仍出现跨域错误,需让服务端配置CORS允许你的域名访问,或通过代理服务器转发请求。
- 可通过浏览器开发者工具的Network面板,对比PHP生成的SOAP报文和当前请求的报文,确保格式完全匹配。
内容的提问来源于stack exchange,提问作者chrisj1005
相关产品推荐
相关产品推荐

