2012-09-28 14 views
5

Czy ktoś może mi powiedzieć, jak wyodrębnić ciąg zwracany przez klasę akcji Struts z odpowiedzi AJAX? Poniżej jest mój urywek kodu:Uzyskaj zwykły tekst z XMLHttpRequest responseText

JS wywołanie:

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

Action

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

Po wydrukowaniu tekstu odpowiedzi (przy użyciu alertu) wydrukowano wiadomość zawierającą wszystkie informacje HTML. Rzeczywista wiadomość jest pogrubione

komunikat odpowiedzi

html> head> title> Apache Tomcat/5.0.28 - Błąd raport/title> style> - {font-family: Tahoma, Arial, sans-serif, kolor: biały, kolor tła: # 525D76; rozmiar czcionki: 22px;} H2 {rodzina czcionek: Tahoma, Arial, sans-serif, kolor: biały, kolor tła: # 525D76; rozmiar czcionki : 16px;} H3 {rodzina czcionek: Tahoma, Arial, sans-serif, kolor: biały, kolor tła: # 525D76; rozmiar czcionki: 14px;} BODY {rodzina czcionek: Tahoma, Arial, sans-serif; kolor: czarny; tło-kolor: biały;} B {rodzina czcionek: Tahoma, Arial, sans-serif; kolor: biały; tło-kolor: # 525D76;} P {rodzina czcionek: Tahoma, Arial, sans-serif tło: biały, kolor: czarny; rozmiar czcionki: 12 pikseli;} A {color: black;} A.name {color: black;} HR {color: # 525D76;} ->/style>/head> body >> HTTP Status 404 - Brak wyniku zdefiniowanego dla działania com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e i wynik Przykładowy komunikat HR size = "1" noshade = "noshade"> p> b> type/b> Raport o stanie/p> p> b> wiadomość u> Brak zdefiniowanego wyniku dla działania com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e i wynik Przykładowy komunikat/u>/p> p> b> opis/b> u> Żądany zasób (brak wyników zdefiniowanych dla działania com.sample.SampleAction $$ EnhancerByCGLIB $$ 69b4e30e i wynik Przykładowy komunikat) jest niedostępny./u>/p>HR size = "1" noshade = "noshade"> h3> Apache Tomcat/5.0.28/h3>/body> html>

+0

Pokaż nam próbkę wyjścia HTML i wskaż, który ciąg znaków chcesz pobrać. Potem możemy napisać dla ciebie kod. – L0j1k

Odpowiedz

0

Właściwość plainText zwraca odpowiedź serwera tak, jak jest, bez żadnej konwersji. Jeśli więc żądanie adresu URL powinno zwrócić stronę w formacie HTML, zobaczysz cały znacznik w wartości ciągu, którą uzyskasz z wartością plainText

Jeśli chcesz mieć tylko tekst, Twoja aplikacja serwera WWW powinna zwrócić odpowiedź w postaci zwykłego tekstu Format żądania

+0

Jeśli chcesz mieć tylko tekst, twoja aplikacja serwera WWW powinna zwrócić odpowiedź w formacie zwykłego tekstu dla twojego żądania. Jak bym to zrobił zamiast "powrócić" Przykładowy komunikat "; '? – Sasha

+0

Cała zawartość test_plain_text.php: Serge

0

Spróbuj:

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

source

+0

Dzięki za czas ur. możesz sprawdzić komunikat odpowiedzi dodany ostatnio i odpowiedzieć na rozwiązanie. Próbowałem tego, ale nie pracowałem zgodnie z oczekiwaniami. – Sasha

2

sposobem na to jest tak ..

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

mającej

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

działania określone W rozpory.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, ale NB to zakłada, że ​​masz gdzie indziej funkcję getXmlHttpRequestObject, która obsługuje różnice między starszym typem IE a XMLHTTPRequest i sposobem, w jaki wszyscy inni wykonują XMLHTTPRequest i zwraca użyteczną instancję. Pierwszy "A" w AJAX oznacza asynchroniczny. Używając opcji "fałsz", wysłano żądanie synchroniczne, które prawdopodobnie jest nieco powolne, gdy jesteś poza maszyną programistyczną. – Dawn

+0

Tak, przypadkowo skopiowałem moje wywołanie JS dla xmlHttpRequest .. Teraz edytowałem mój kod ... –

Powiązane problemy