2012-03-20 3 views
0

Я пытаюсь реализовать асинхронный вход в JEE6 webapp с помощью javascript и XMLHttpRequest. Я должен был бы сделать асинхронный вызов с XMLHttpRequest в/app/j_security_check и проанализировать ответ так или иначе, чтобы я мог показать пользователю диалог с «Ошибка входа в систему» ​​или «Успех входа в систему». Я использую Glassfish 3.1.1.Java EE веб-приложение асинхронный вход в Glassfish 3.1.1

Что-то я пробовал, но ответ всегда равен нулю. У меня есть login.jsp, который держит форму входа и следующий сценарий:

function submitLogin(formName) { 
    var urlAction = "/app/j_security_check"; 
    var client; 
    var dataString; 
    if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 
     client = new XMLHttpRequest(); 
    } else { // IE6, IE5 
     client = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    client.onreadystatechange = function() { 
     var response = client.responseText; // this is always null 

        /* ALERT THE DIALOG HERE ACCORDING TO RESPONSE? */ 
    }; 

    var form = document.forms[formName]; 
    var username = form.elements["j_username"].value; 
    var password = form.elements["j_password"].value; 
    dataString = "j_username=" + username + "&j_password=" + password; 
    client.open("POST", urlAction, true); 
    client.setRequestHeader("Content-type", 
      "application/x-www-form-urlencoded"); 
    client.send(dataString); 
} 

Так что мой вопрос, возможно ли это и как следует осуществить?

Редактировать: Проблема, похоже, возникает из-за перенаправления Java Security после принудительного/неудачного входа в систему. Кажется, что всегда перенаправляет страницу, независимо от того, что я делаю с javascript. Я также попытался использовать jQuery ajax методы безрезультатно.

ответ

0

я сделать что-то подобное, возможно, это поможет вам:

 //Get a XMLHttpRequest object. 
     //The XMLHttpRequest specification defines an API that provides 
     //scripted client functionality for transferring data between a client and a server. 
     function getXMLObject() //XML OBJECT 
     { 
      var xmlHttp = false; 
      try { 
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP") // For Old Microsoft Browsers 
      } 
      catch (e) { 
      try { 
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") // For Microsoft IE 6.0+ 
      } 
      catch (e2) { 
       xmlHttp = false // No Browser accepts the XMLHTTP Object then false 
      } 
      } 
      if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
      xmlHttp = new XMLHttpRequest();  //For Mozilla, Opera Browsers 
      } 
      return xmlHttp; // Mandatory Statement returning the ajax object created 
     } 

     var xmlhttp = new getXMLObject(); //xmlhttp holds the ajax obj 

     /* 
     * Use this method to send data to server using ajax. 
     * Sent attribute name is : attribute 
     * Sent attribute value is : attribute:val 
     */ 
     function ajaxFunction(attribute,val, url) { 
      if(xmlhttp) { 
      var param = attribute+"="+attribute+":"+val; 
      param +="&tiers_payant="+document.getElementsByName("tiers_payant")[0].value; //Add the value to send here 
      xmlhttp.open("POST",url,true); 
      xmlhttp.onreadystatechange = handleServerResponse; 
      xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
      xmlhttp.send(param); 
      } 
     } 

     /** 
     * When client received response from server, 
     * set the inner HTML of the page with the one returned by server. 
     */ 
     function handleServerResponse() { 
      if (xmlhttp.readyState == 4) { 
      if(xmlhttp.status == 200) { 
       // DO what you want with : xmlhttp.responseText; 

      } 
      else { 
       document.getElementById("erreur").innerHTML="Le serveur le répond pas."; 
       //alert("Error during AJAX call. Please try again"+xmlhttp.status); 
      } 
      } 
     } 
+0

Это не похоже на работу. Страница всегда перенаправляется после входа в систему, и я не могу ничего с ней поделать ни в собственном Javascript, ни в jQuery. –

+0

@Antionio Можете ли вы обновить свой вопрос тем, что вы пробовали? Вы добавили 'if (client.readyState == 4) { if (client.status == 200) {' in 'onreadystatechange', как я предлагаю? –

+0

Мы фактически отказались от всей идеи и пошли без асинхронного входа. –

Смежные вопросы