2012-09-28 11 views
5

¿Alguien puede decirme cómo extraer una cadena devuelta por la clase de acción Struts desde la respuesta AJAX? A continuación se muestra mi fragmento de código:Obtenga texto sin formato de XMLHttpRequest responseText

JS llamada:

xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open('POST', 'getMessage.do', false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send(); 
    alert(xmlhttp.responseText); 

struts.xml

<action name="getMessage" class="SampleAction" method="getMessage"/> 

Acción

public String getMessage() { 
    String msg = null; 
    HttpSession hSession = this.request.getSession(false); 
    if(null != hSession) { 
     if(null != hSession.getAttribute("user")) { 
      User user = (User) hSession.getAttribute("user"); 
      if(null != user.account) { 
       msg = user.account.getMessage(); //Sample message 
      } 
     } 
    } 
    return msg; 
} 

Cuando imprimí el texto de respuesta (usando alerta), imprimí un mensaje con toda la información HTML incluida. mensaje real está resaltado en negrita

mensaje de respuesta

html> head> title> Apache Tomcat/5.0.28 - Informe de Error/title> style> - {font-family: Tahoma, Arial, sans-serif; color: blanco; color de fondo: # 525D76; tamaño de fuente: 22px;} H2 {font-family: Tahoma, Arial, sans-serif; color: blanco; color de fondo: # 525D76; tamaño de letra : 16px;} H3 {font-family: Tahoma, Arial, sans-serif; color: blanco; background-color: # 525D76; font-size: 14px;} BODY {font-family: Tahoma, Arial, sans-serif; color: negro; color de fondo: blanco;} B {font-family: Tahoma, Arial, sans-serif; color: blanco; color de fondo: # 525D76;} P {font-family: Tahoma, Arial, sans-serif ; fondo: blanco; color: negro; tamaño de letra: 12px;} A {color: negro;} nombre A. {color: negro;} HR {color: # 525D76;} ->/style>/head> body >> HTTP Status 404 - Ningún resultado definido para la acción com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e y resultado Mensaje de muestra HR size = "1" noshade = "noshade"> p> b> tipo/b> Informe de estado/p> p> b> mensaje u> No se definió ningún resultado para la acción com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e y resultado Mensaje de muestra/u>/p> p> b> description/b> u> El recurso solicitado (No se definió el resultado para la acción com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e y el resultado Mensaje de muestra) no está disponible./u>/p>HR size = "1" noshade = "noshade"> h3> Apache Tomcat/5.0.28/h3>/body> html>

+0

Por favor, muéstrenos una muestra de la salida HTML y señale qué cadena exactamente quiere capturar. Entonces podemos escribir un código para ti. – L0j1k

Respuesta

0

la propiedad plainText devuelve la respuesta del servidor tal cual, sin ninguna conversión. Por lo tanto, si la solicitud url devuelve la página con formato html verá el marcado en el valor de cadena que obtiene con plainText

Si desea tener solo texto, la aplicación del servidor web debe devolver una respuesta en texto sin formato formato para su solicitud

+0

Si desea tener solo texto allí, su aplicación de servidor web debe devolver una respuesta en formato de texto sin formato para su solicitud ¿Cómo habría hecho en lugar de 'devolver' el mensaje de muestra "; '? – Sasha

+0

Todo el contenido de test_plain_text.php: Serge

0

Probar:

var OriginalString = xmlhttp.responseText; 
var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,""); 
alert(StrippedString); 

source

+0

Gracias por su tiempo. ¿Puedes verificar el mensaje de respuesta agregado recientemente y responder la solución? Lo intenté pero no funcionó como esperaba. – Sasha

2

La manera de hacerlo es como esto ..

AJAX LLAMADA

var xmlhttp; 
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp = new XMLHttpRequest(); 
} 
else { // code for IE6, IE5 
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange = function() { 
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
alert(xmlhttp.responseText); 
} 
} 
xmlhttp.open("POST", "URL"); 
xmlhttp.send(); 

ACCIÓN

public String execute() throws Exception { 
     try{ 
      PrintWriter outWriter = null; 
      StringBuffer msg= new StringBuffer(""); 
      HttpServletResponse httpResponse = ServletActionContext.getResponse(); 
      try { 
       outWriter = httpResponse.getWriter(); 
             msg.append("String to be sent to View"); 
        } 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      finally{ 

       if(outWriter!=null){ 
        httpResponse.setContentType("text/html"); 
        outWriter.println(msg.toString()); 
        outWriter.flush(); 
        outWriter.close(); 
       } 
      } 

     }catch (Exception e) { 
      throw new Exception(e); 
     } 
     return null; 
     } 

acción definida en puntales.XML

<action name="MYActionName" class="MYActionNameBean" method="execute"> 
      <result type="stream"> 
        <param name="contentType">text/html</param> 
        <param name="inputName">inputStream</param> 
      </result> 
     </action> 
+0

+1 pero NB esto supone que tiene en otro lugar una función getXmlHttpRequestObject que maneja las diferencias entre la forma en que el IE más antiguo hace XMLHTTPRequest y la forma en que todos los demás hacen XMLHTTPRequest y devuelve una instancia utilizable. La primera 'A' en AJAX significa asincrónico. Al usar falso, ha realizado una solicitud sincrónica, que probablemente sea un poco lenta una vez que esté fuera de su máquina de desarrollo. – Dawn

+0

Sí, accidentalmente copié mi llamada JS para xmlHttpRequest .. He editado mi código ahora ... –

Cuestiones relacionadas