尝试使用jQuery AJAX调用SOAP webservice时,为什么请求体是空的?

时间:2011-12-09 12:05:30

标签: jquery ajax web-services soap

我构建了一个完整的肥皂信封soapEnvelopeXML,我可以通过我的TCP / IP监视器看到呼叫,但问题是,请求URI不是调用正确的方法,而是与{ {1}}好像它是标题中的一个选项。所以我没有得到任何结果。我不想将参数作为JSON对象传递。关于我可能出错的任何想法?

soapEnvelopeXML

我已经测试了顶部的代码以使用POST而不是GET但是我得到了一个空的响应,我看到正在进行一个空的webservice调用。我不知道GET对于SOAP请求是非法的。有谁知道为什么发送的内容是空话?

3 个答案:

答案 0 :(得分:1)

问题可能是SOAP应该是POST吗?

http://www.coderanch.com/t/463869/Web-Services/java/SOAP-request-as-HTTP

  

问:如何将HTTP请求作为HTTP GET发送?

     答:你不能。 SOAP总是使用POST。只有REST使用GET(以及各种其他HTTP方法,包括POST)。

更新

  

多亏了这个,我正在使用GET,因为当我使用POST时发出了一个空的Web服务调用。那么我在使用POST时为什么要进行空的Web服务调用的想法呢?

我在本地方框上遇到了相同的行为如果我转到localhost ,但我通过这样做得到了它:

  1. 组建域名
  2. 将其粘贴在hosts文件中,指向127.0.0.1
  3. 使用该假域访问本地网络服务器
  4. 试试这段代码,它对我有用:

    var soapEnvelopeXML= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"> <soap:Header>CUSTOM HEADER</soap:Header> <soap:Body>PARAMS</soap:Body> </soap:Envelope>";
    $.ajax({
        type: "post",
        url: "http://superblah.com/webservice/serviceName/",
        contentType: "text/xml; charset=\"utf-8\"",
        dataType: "xml",       
        data: soapEnvelopeXML,
        processData: false,
        beforeSend: function(xhr){
          xhr.setRequestHeader(
            "SOAPTarget",
            "http://superblah.com/webservice/serviceName/"
          );
          xhr.setRequestHeader(
            "SOAPAction",
            "http://superblah.com/webservice/serviceName/Something"
          );
        },
        error: function(xhr, status, error) { 
            alert("Error processing your request: \n" + status + " : " + error);
        },
        success: function(response){
            var xml = $(response);
            alert(xml);
        }
    });
    

    我从这里得到了这段代码:

答案 1 :(得分:0)

它与URL连接的原因是GET方法的含义。 将此更改为POST,我怀疑它适合您。

答案 2 :(得分:0)

$.ajax({
    type: "POST",
    url: "http://localhost:8080/webservice/serviceName/",
    data: soapEnvelopeXML,
    contentType: "text/xml",
    dataType: ($.browser.msie) ? "text" : "xml",       
    error: function(xhr, status, error) { 
        alert("Error processing your request: \n" + status + " : " + error);
    },
    success: function(response){
        var xml = $(response);
        alert(xml);
    }
});