我正在为远程XML服务构建一个接口。这是我的$ .ajax函数:
this.sendInput = function () {
jQ.ajax({'url': URL,
'type': 'POST',
'data': app._CONTENT,
'contentType': 'text/xml',
'dataType': 'XML',
'error': function (data) { app.processError(data); },
'success': function(data){ app._OUTPUT = data; app.processOutput(); }});
};
当我使用Chrome向服务器发送此请求时,我会收到以下标题的200响应:
Accept:application/xml, text/xml, \*/\*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:930
Content-Type:text/xml
Host:host.com
Origin:http://elsewares.org
Pragma:no-cache
Referer:http://blah.org
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
当我在Firefox 12中发送相同的请求时,我收到415错误,其中包含以下请求标头:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Access-Control-Request-He... content-type
Access-Control-Request-Me... POST
Cache-Control no-cache
Connection keep-alive
Host host.com
Origin http://host.org
Pragma no-cache
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0 FirePHP/0.7.1
x-insight activate
我应该注意,服务器设置为允许Access-Control-Request-Headers:Content-Type,因此我们可以将POST请求的主体设置为XML。
任何想法是什么不匹配在这里? Firefox必须能够在将要使用的环境中工作。
以下是请求的正文:
<?xml version="1.0" encoding="UTF-8" ?>
<MELTSinput>
<initialize>
<SiO2>48.68</SiO2>
<TiO2>1.01</TiO2>
<Al2O3>17.64</Al2O3>
<Fe2O3>0.89</Fe2O3>
<Cr2O3>0.0425</Cr2O3>
<FeO>7.59</FeO>
<MnO>0.00</MnO>
<MgO>9.10</MgO>
<NiO>0.0</NiO>
<CoO>0.0</CoO>
<CaO>12.45</CaO>
<Na2O>2.65</Na2O>
<K2O>0.03</K2O>
<P2O5>0.08</P2O5>
<H2O>0.20</H2O>
</initialize>
<calculationMode>equilibrate</calculationMode>
<title>alpha testing</title>
<constraints>
<setTP>
<initialT>1200</initialT>
<initialP>1000</initialP>
</setTP>
</constraints>
</MELTSinput>
答案 0 :(得分:1)
它可能与Miroshko建议的字符集相关,但最有可能找到问题的方法是查看服务器:在那里查看错误日志;应该对问题的原因有一些解释。也许XML由于某种原因无法解析,因此服务器不相信它是 XML。
答案 1 :(得分:0)
Firefox自动将charset添加到Content-Type,因此它变为“text / xml; charset = utf-8”。我猜,服务器只进行直接比较,因此给出了415