2017-01-06 1 views
1

Ich habe einen AJAX, der einen POST zu einem Servlet macht. Servlet führt eine Berechnung durch und gibt eine Antwort zurück. AJAX-Erfolgsfunktion liest die Antwort und macht bestimmte Dinge.AJAX empfängt keine Antwort vom Servlet

Ajax-Aufruf

$.ajax({ 
    type: "POST", 
    url: "/bin/path/to/Servlet", 
    data: $(this).serialize(), 
    dataType: "html", 
    success: function(responseValue) { 
     if(responseValue == '200') { 
       // Do something 
      }else { 
       console.log("it is not 200"); 
      } 
    }, 
    error: trialForm.trialError 
    }).done(function(status) { 
      $(trialForm.submitButton).show(); 
      $(trialForm.loader).hide(); 
    }); 
} 

SERVLET

protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) { 
    response.setContentType("text/html");  

    URL url = new URL("www.apriurl.com"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type","application/json"); 
    conn.setRequestProperty("Authorization","XXXXZZZZ " + strSig); 
    conn.setRequestProperty("Accept","application/json"); 
    conn.setRequestProperty("ZZZZZ",clientID); 

    OutputStream os = conn.getOutputStream(); 
    os.write(inputParameters.getBytes()); 
    os.flush(); 

    System.out.println(conn.getResponseCode()); 
    response.getWriter().write(conn.getResponseCode()); 
} 
  • response ist eine Variable in teh Java-Klasse verwendet.
  • Es hat den richtigen Wert. Ich sehe den Wert, der in Protokolldatei gedruckt wird, nachdem Sysout ausgeführt wurde
  • Die Antwort ist nur ein verstümmeltes Fragezeichen (?). Ich habe die Konsole angemeldet. Ich vermute es muss etwas mit dem Datentyp machen. Ich habe ein paar andere Typen ausprobiert, konnte es aber nicht herausfinden. Jede Hilfe ist gut.
+1

Sie Frage ist nicht sehr klar. Zu Beginn scheint es nicht, dass Sie 'Antwort'-Wert zu Ihrer 'Antwort' im Servlet hinzufügen, und es scheint auch nicht, dass Sie abrufen und verwenden 'ResponseValue' in Ihrem JS –

+0

Sorry, ich habe versucht, unnötige zu entfernen Code von der Post. Klar, ich habe es nicht gut gemacht. Im Grunde interagiert Servelt mit einer 3rd-Party-API, und was auch immer es von diesem dritten Teil bekommt, es geht auf AJAX über. Ich antworte ich von 3rd Party ist in Ordnung, ich kann es protokollieren, aber nicht in der Lage, es an AJAX weiterzugeben – user3861559

+0

Ja, ich versuchte 'response.getWriter(). Write (" test ");' Statt der Ajax Callback Funktion erhält den Wert anstelle von verstümmeltem Text. – user3861559

Antwort

1

Dies macht einen write (int) eher als ein write (String) also, wenn Sie write(200) tun, ist es den ASCII-Wert von 200

versuchen 200 als String

als

response.getWriter().write(String.valueOf (conn.getResponseCode())); 
Senden Senden

siehe https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#write(int)

public void schreiben (int c)

Schreibt ein einzelnes Zeichen.

+0

Danke! Ich habe 'response.getWriter(). Write (String.valueOf (conn.getResponseCode()));' und das funktioniert – user3861559

+0

Absolut! Ich war einfach zu sehr damit beschäftigt, mich über den Arbeitscode zu ärgern. Vielen Dank! – user3861559