Javascript 在soap请求中获取NULL而不是字符串值

Javascript 在soap请求中获取NULL而不是字符串值,javascript,jquery,ajax,web-services,soap,Javascript,Jquery,Ajax,Web Services,Soap,我有一个移动应用程序,它通过ajax与我的soap web服务通信 用户必须插入两个字段才能登录uname和password,并在按下login键时输入 按钮,调用javascript方法通过ajax将数据发布到web服务。 我可以从html页面获取输入值,但是当我调试web服务时,我看到接收到的参数是空的,而不是用户输入的值,我不知道为什么 function login() { var uname = document.getElementById('uname').value; va

我有一个移动应用程序,它通过ajax与我的soap web服务通信

用户必须插入两个字段才能登录uname和password,并在按下login键时输入 按钮,调用javascript方法通过ajax将数据发布到web服务。 我可以从html页面获取输入值,但是当我调试web服务时,我看到接收到的参数是空的,而不是用户输入的值,我不知道为什么

function login()
{
  var uname = document.getElementById('uname').value;
  var pass  = document.getElementById('password').value;


  var soapRequest =
        '<?xml version="1.0" encoding="utf-8"?> \
        <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"\
            xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">\
          <soap:Body>\
            <Login xmlns="http://service.webservice.org/">\
              <Name>' + uname + '</Name>\
              <Password>' + pass + '</Password>\
            </Login>\
          </soap:Body>\
        </soap:Envelope>';  

  $.ajax({
    type : "POST",          
    url :  "http://localhost:8080/WebService/Service",          
    contentType: "text/xml",
    dataType: "xml",
    data: soapRequest,

    success : function(data, status, req, xml, xmlHttpRequest, responseXML) 
    {
        var xmlText = $(req.responseXML).find('LoginResult').text();
        alert(xmlText);
            },
    error: function () 
    { 
        alert("error");
    }

});  

答案是,我们需要声明在soap请求中调用的方法的名称空间

因此,在您将web服务部署到glassfish或它创建的其他服务器之后 WSDL文件和每个方法都有名称空间

所以soap请求应该是这样的

var soapRequest =
    '<?xml version="1.0" encoding="utf-8"?> \
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"\
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">\
      <soap:Body>\
        <ns2:Login xmlns:ns2="http://service.webservice.org/">\
          <Name>' + uname + '</Name>\
          <Password>' + pass + '</Password>\
        </ns2:Login>\
      </soap:Body>\
    </soap:Envelope>';  

ns2是默认情况下创建的名称空间,您可以自己设置名称空间

>我可以从html页面获取输入值。确认那些ID为uname和password的元素在页面上实际存在。它们在html页面上找到,我使用它们将js函数链接到html页面,以便获取输入值。。即使我在login方法的前两行之后使用alert方法,我也可以看到输入值i正在变为null,即使我传递了一个硬编码字符串,而不是我看到的'uname'和'pass'参数。您在服务器上得到的是null,而不是客户端。这更多的是一个如何从JavaScript执行soap的问题。。我不知道为什么。。soap请求没有问题