Servlet-Antwort an AJAX-request ist leer

Ich sende eine AJAX-request mittels javascript an ein servlet. Das servlet ist in der Tat Antworten, aber die Antwort-header ist null und so ist der Antwort-text.

Wenn ich versuche, den gleichen client-code, anstatt senden Sie die Anfrage an eine php-Seite funktioniert es einwandfrei.

Hier sind die zwei Kunden (Sie können versuchen Sie Sie und schauen Sie bei Ihren Quellen):

  • ajax-servlet: http://79.136.61.27/web/ajax-to-servlet.html
  • ajax-php: http://79.136.61.27/web/ajax-to-php.html

Den Ausgang beim senden der Anfrage an den servlet ist:

Response will go below

Response:

responseText was null!

Headers:

null response headers!

Den Ausgang beim senden der Anfrage an PHP ist:

Response will go below

Response:

Hi from php

Headers:

Date: Sun, 17 Apr 2011 11:58:57 GMT Server: Apache/2.2.17 (Win32) PHP/5.3.6 X-Powered-By: PHP/5.3.6 Content-Length: 18 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html

Hier ist der code für das servlet. Wie Sie sehen können bin ich Experimentieren ein wenig mit den Einstellungen Header und Inhalt geben, aber keiner meiner versuche scheinen, um eine Wirkung. Die seltsame Sache ist, dass ich noch eine Hallo-Welt-Beispiel, wie dies mithilfe von servlets erst vor kurzem und es funktioniert nur ohne messing mit Header und so. Aber jetzt ist es einfach nicht mehr funktioniert. 🙁

package simple;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SimpleServlet extends HttpServlet {

    private static final long serialVersionUID = -6713061702557291351L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String out = "<p>Hi from servlet!</p>";

        response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        System.out.println("got request");

        PrintWriter pw = response.getWriter();

        pw.write(out);
        pw.flush();
        boolean error = pw.checkError();
        System.out.println("Error? " + error);  
    }
}

hifromphp.php ist einfach:

<?php
    echo "<p>Hi from php</p>";
?>

Vielen Dank für das Lesen und vielen Dank im Voraus!

Edit: ich erkannte, dass diese links funktionieren nicht immer. So, für Archiv-Zwecke, ich bin einfügen ajax-to-servlet.html hier. ajax-to-php.html ist identisch, mit der Ausnahme der URL, wohin der Antrag geht.
ajax-to-html.html:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
                    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Send ajax</title>
  </head>
  <body>
    <script type="text/javascript">
            /* <![CDATA[ */
            function getXMLHttp() {
                var xmlHttp = new XMLHttpRequest();

                return xmlHttp;
            }

            function sendAjax() {
                var xmlHttp = getXMLHttp();
                var divResp = document.getElementById("response");
                var divHdrs = document.getElementById("responseHeaders");

                xmlHttp.onreadystatechange = function() {
                    if (xmlHttp.readyState == 4) {
                        var hdrs = xmlHttp.getAllResponseHeaders();
                        var resp = xmlHttp.responseText;

                        divHdrs.innerHTML = "<p>Headers:</p><p>" + (hdrs ? hdrs : "null response headers!<p>");
                        divResp.innerHTML = "<p>Response:</p>" + (resp ? resp : "<p>responseText was null!<p>");
                    }
                }       

                xmlHttp.open("GET", "http://79.136.61.27:8080/SimpleServlet/SimpleServlet", true);
                xmlHttp.send(null);
            }
            /* ]]> */
        </script>
    <p><input type="button" value="Send Ajax" onclick="javascript: sendAjax();"/></p>
    <p>Response will go below</p>
    <div id="response"></div>
    <div id="responseHeaders"></div>
  </body>
</html>
Sind Sie mit der servlet-Klasse, die Sie denken, Sie ausführen?
Vielen Dank für Ihren Kommentar. Ja, ich kann sehen, wie es aufgerufen wird und wie es reagiert auf änderungen im code, also die, die ich gepostet ist in der Tat ausführen.

InformationsquelleAutor Eric Lilja | 2011-04-17

Schreibe einen Kommentar