所以我试图发出一个请求并传入一个SOAP对象,问题是它恢复正常(onSuccess)但是responseXML不存在。我使用了Fiddler和HTTP Client(OSX版的fiddler)并输入相同的请求,繁荣,两者都回来了正确的响应。原型,而不是原型。
我尝试了标题和参数字段......
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function test(){
var body = '<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope' +
' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +
' xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"' +
' xmlns:tns="urn:uvindexalert" xmlns:types="urn:uvindexalert/encodedTypes"' +
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
' xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
' <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
' <tns:getUVIndexAlertByZipCode>' +
' <in0 xsi:type="xsd:string">92109</in0>' +
' </tns:getUVIndexAlertByZipCode>' +
' </soap:Body>' +
'</soap:Envelope>';
var headers = ["SOAPAction", " ", "Content-Type", "text/xml"];
var request = new Ajax.Request("http://iaspub.epa.gov/uvindexalert/services/UVIndexAlertPort?wsdl", {
contentType: "application/xml",
requestHeaders: headers,
parameters: "SOAPAction: ",
postBody: body,
onSuccess: function(response){
var j = 0;
},
onFailure: function(){
var i = 0;
}
});
}
test();
</script>
变种&amp;我只是知道它在哪里打破所以我可以检查它。我也看了网上,注意到有人说尝试而不是text / xml application / xml然后添加charset = utf-8所以我做了所有这些但仍然没有。任何人都知道如何使用SOAPAction获取XML?
答案 0 :(得分:3)
除了跨站点脚本安全问题之外,我之前编写了一个Prototype.js SOAP客户端,并且在“Content-Type”和“SOAPAction”头文件中遇到了很多问题。我最终使用了以下内容并且它有效(但仅适用于同一域中的请求)。
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
网络服务器应为OPTIONS
次请求发送此标头:
Access-Control-Allow-Origin: *
答案 1 :(得分:0)
您无法使用Ajax进行跨域请求。这是一个安全限制。
正在进行一些不同的努力来启用安全的跨域请求,但并非所有浏览器都支持它们,并且它们需要您尝试向其发出请求的站点的合作。许多人使用HTTP代理脚本 - 服务器上接收Ajax请求,联系远程URL并传递响应的脚本。