2012-09-28 6 views
5

Qualcuno può dirmi come estrarre una stringa restituita dalla classe di azione Struts dalla risposta AJAX? Qui di seguito è il mio frammento di codice:Ottieni testo semplice da XMLHttpRequest responseTesto

JS chiamata:

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"/> 

azione

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; 
} 

Quando stampo il testo della risposta (usando l'avviso), ha stampato un messaggio con tutte le informazioni HTML incluse. messaggio effettivo è evidenziato in grassetto

messaggio di risposta

html> head> title> Apache Tomcat/5.0.28 - Errore di report/title> style> - {font-family: Tahoma, Arial, sans-serif, colore: bianco; background-color: # 525D76; font-size: 22px;} H2 {font-family: Tahoma, Arial, sans-serif; colore: bianco; background-color: # 525D76; font-size : 16px;} H3 {font-family: Tahoma, Arial, sans-serif; colore: bianco; background-color: # 525D76; font-size: 14px;} BODY {font-family: Tahoma, Arial, sans-serif; colore: nero; colore di sfondo: bianco;} B {font-family: Tahoma, Arial, sans-serif; colore: bianco; background-color: # 525D76;} P {font-family: Tahoma, Arial, sans-serif ; sfondo: bianco; colore: nero; dimensione font: 12px;} A {colore: nero;} A.name {colore: nero;} HR {colore: # 525D76;} ->/style>/head> body >> HTTP Status 404 - Nessun risultato definito per l'azione com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e e risultato Esempio messaggio Dimensioni HR = "1" noshade = "noshade"> p> b> tipo/b> rapporto di stato/p> p> b> messaggio u> Nessun risultato definito per l'azione com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e e risultato Esempio messaggio/u>/p> p> b> description/b> u> La risorsa richiesta (Nessun risultato definito per l'azione com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e e risultato Esempio messaggio) non è disponibile./u>/p>HR size = "1" noshade = "noshade"> h3> Apache Tomcat/5.0.28/h3>/body> html>

+0

Si prega di mostrarci un esempio dell'output HTML e indicare quale stringa esattamente si vuole afferrare. Quindi possiamo scrivere un codice per te. – L0j1k

risposta

0

la proprietà plainText restituisce la risposta del server così com'è, senza alcuna conversione. Quindi se la richiesta url dovesse restituire la pagina formattata in html vedrai tutto il markup nel valore stringa ottenuto con plainText

Se ti piace avere solo il testo, l'applicazione del tuo server web dovrebbe restituire una risposta in un testo normale formato per la vostra richiesta

+0

Se si desidera avere solo testo, l'applicazione del server Web dovrebbe restituire una risposta in un formato di testo normale per la propria richiesta Come avrei fatto invece di "restituire" il messaggio di esempio ";"? – Sasha

+0

L'intero contenuto di test_plain_text.php: Serge

0

Prova:

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

source

+0

Grazie per il tuo tempo. puoi controllare il messaggio di risposta aggiunto di recente e rispondere alla soluzione. Ho provato questo, ma non ho funzionato come previsto. – Sasha

2

Il modo per farlo è come questo ..

AJAX CALL

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(); 

AZIONE

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; 
     } 

azione definita nel STRUTS.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 ma NB questo presuppone che tu abbia altrove una funzione getXmlHttpRequestObject che gestisce le differenze tra il modo in cui IE precedente esegue XMLHTTPRequest e il modo in cui tutti gli altri fanno XMLHTTPRequest e restituisce un'istanza utilizzabile. Il primo 'A' in AJAX sta per asincrono. Usando false, hai fatto una richiesta sincrona, che è probabilmente un po 'lenta una volta che sei fuori dalla tua macchina di sviluppo. – Dawn

+0

sì, ho accidentalmente copiato la mia chiamata JS per xmlHttpRequest .. Ho modificato il mio codice ora .. –