SOAP原型Ajax SOAPAction标题问题

时间:2010-01-22 04:12:59

标签: javascript ajax soap prototypejs

所以我试图发出一个请求并传入一个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?

2 个答案:

答案 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并传递响应的脚本。