2013-12-12 203 views
0

我有一个简单的登录页面,它将登录信息发送到servlet,并作为响应接收一个在jQuery中解释的参数。

数据发送正确,转到servlet,它也正确地设置参数(我可以看到在响应头中的Firebug中)。

问题是我想从返回的响应中检索数据并将其分配给JavaScript变量。 request对象是空的,而在Chrome检查我看到一个警告:

Uncaught TypeError: Object has no method 'getResponseHeader'.

当我把它用console.log()什么不回我,没有值显示。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<meta name="description" content=""> 
<meta name="author" content=""> 
<link rel="shortcut icon" href="../../assets/ico/favicon.png"> 
<link 
    href="http://minikomi.github.io/Bootstrap-Form-Builder/assets/css/lib/bootstrap.min.css" 
    rel="stylesheet"> 
<link 
    href="http://minikomi.github.io/Bootstrap-Form-Builder/assets/css/lib/bootstrap-responsive.min.css" 
    rel="stylesheet"> 
<link 
    href="http://minikomi.github.io/Bootstrap-Form-Builder/assets/css/custom.css" 
    rel="stylesheet"> 
<script src="http://code.jquery.com/jquery-2.0.3.js"></script> 
<script src="../js/jquery.validate.js"></script> 


<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Logowanie</title> 

<!-- Bootstrap core CSS --> 
<link href="../css/bootstrap.min.css" rel="stylesheet"> 

<!-- Custom styles for this template --> 
<link href="../css/signin.css" rel="stylesheet"> 

<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 
<!--[if lt IE 9]> 
     <script src="../../assets/js/html5shiv.js"></script> 
     <script src="../../assets/js/respond.min.js"></script> 
    <![endif]--> 
</head> 

<body> 

    <div class="container"> 

     <form class="form-signin" action="Login" method="post"> 
      <h2 class="form-signin-heading">Logowanie</h2> 

      <input type="email" name="email" class="form-control" id="email" 
       placeholder="Adres email" autofocus> 


       <input type="password" id="password" 
       name="password" class="form-control" placeholder="Haslo"> 


     </form> 
     <button id="zaloguj" value="zaloguj" class="btn btn-success btn-large"> 
      <i class="icon-white icon-th-list"></i>Zaloguj 
     </button> 

    </div> 
    <!-- /container --> 


    <!-- Bootstrap core JavaScript 
    ================================================== --> 
    <!-- Placed at the end of the document so the pages load faster --> 

    <script type="text/javascript"> 

     $('#zaloguj').click(function() { 
      var email = $("#email").val(); 
      var password = $("#password").val(); 

      console.log(email+password); 
      var data = "email=" + email + "&password=" + password; 
      $.ajax({ 
       url : "Login", 
       type : "POST", 
       data : data, 

       success : function(request) { 
        console.log(request); 
        var log = request.getResponseHeader("log"); 
        console.log(log);     

        if (log == 1) { 

         $(":header").after("Poprawne logowanie").css({ background: "#ccc", color: "green" }); 
         document.location.href = '/landing.html'; 
        } else { 
         $(":header").after("Błędne logowanie").css({ background: "#ccc", color: "red" }); 
        } 
       }, 

      }); 

     }); 
    </script> 
</body> 
</html> 
+1

什么'Login' returnin G? 'request'参数是从URL返回的数据,它不会有'getResponseHeader'方法。 –

+2

欢迎来到SO,请不要将您的整个HTML粘贴到问题中。如果您只是添加相关部件,它可以让所有人更容易 – Liam

回答

2

看起来像你使用错误的超载成功。

success : function(request) { 
    console.log(request); 
    var log = request.getResponseHeader("log"); 

应该是:

success : function(data, status, xhr) { 
    console.log(data); 
    var log = xhr.getResponseHeader("log"); 

docs

success Type: Function(PlainObject data, String textStatus, jqXHR jqXHR)

然后

The jqXHR Object

The jQuery XMLHttpRequest (jqXHR) object returned by $.ajax() as of jQuery 1.5 is a superset of the browser's native XMLHttpRequest object. For example, it contains responseText and responseXML properties, as well as a getResponseHeader() method.

1

成功函数返回(PlainObject data, String textStatus, jqXHR jqXHR)。你正在寻找的是最后一个参数,而不是响应本身。

success: function(request, status, xhr) { 
    console.log(xhr.getResponseHeader("log")); 
} 
+0

击败我! – Liam