【问题标题】:SOAP and Ajax Not Working TogetherSOAP 和 Ajax 不能一起工作
【发布时间】:2015-02-06 10:59:50
【问题描述】:

对于我的一生,我无法弄清楚为什么这个 Ajax SOAP 请求不起作用。

这主要是我在此处找到的代码版本: jQuery AJAX SOAP based web services and CORS (cross origin resource sharing)

当函数运行时,它会在控制台中返回 500 错误。该错误返回包含以下错误的 XML:

<faultstring>Unable to handle request without a valid action parameter. Please supply a valid soap action.</faultstring>

服务器错误日志中没有显示任何内容。我用来生成该请求的 XML 是由 SOAP UI 创建的,并在该上下文中返回正确的信息而没有任何错误。

附加信息:服务器标头已完全正确设置,我可以返回整个 XML 服务而不会出现跨域问题。只有当我尝试发送由“se”变量表示的查询时,我才会遇到麻烦。我已经在存在和不存在的情况下尝试了使用“?WSDL”的代码。我也尝试过同时使用 POST 和 GET(虽然很确定 POST 是可以使用的)。

<script type="text/javascript">
        var se = '';
        se += '<?xml version="1.0" encoding="UTF-8" standalone="no"?>';
        se += '<soapenv:Envelope xmlns:soapenv="schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://XXX.YYYY.com/">';
        se += '<soapenv:Header/>';
        se += '<soapenv:Body>';
        se += '<test:GetCurrentProductRelease/>';
        se += '</soapenv:Body>';
        se += '</soapenv:Envelope>';

                $.ajax({
                url: 'http://xx.xx.xxx.xxxx/XXXAdminDS/XXXAdminDS.asmx?WSDL',
                type: "POST",
                    dataType: "xml",
                    data: se,
                    crossDomain: true,
                    headers: {"X-Requested-With": "XMLHttpRequest"},
                    beforeSend: function(xhr) {
                        xhr.setRequestHeader("SOAPAction", "http://xx.xx.xxx.xxx/XXXAdminDS/XXXAdminDS.asmx?WSDL");
                    },

                    // success: function(xml) {
                    //   some code here
                    // },

                    // failure: function(xml) {
                    //   more code here
                    // },

                    contentType: "charset=UTF-8"
                });
            }
        </script>

【问题讨论】:

    标签: jquery ajax web-services soap


    【解决方案1】:

    从问题中给出的信息中很难得出答案,但如果有人遇到类似问题,我将分享我的答案:

    我试图用自定义命名空间替换从 SOAP 生成的 tempuri.org 命名空间,上面用“xmlns:test =“http://XXX.YYYY.com/”表示。唯一的问题是我没有告诉首先设置 Web 服务的人,他们不知道您不应该在生产中使用 tempuri.org。所以问题基本上是 tempuri.org 是 Web 服务识别的唯一命名空间。

    我解决了他们不知道的问题,他们让我设置了自定义命名空间,现在应用程序可以运行了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 2014-01-07
      • 2019-08-17
      相关资源
      最近更新 更多