2012-05-19 2 views
0

У меня большая проблема, и я не вижу ошибок в моем коде. Программа должна добавить два значения из полей p1 и p2 и загрузить их на сайт без перезагрузки всей страницы. Я сделал это в простом javascript, но я бы хотел использовать AJAX. Все уже сделано, но где-то есть небольшая ошибка.ResponseText является нулевым, хотя он должен быть установлен JavaScript

я посмотреть на validate() и insterter(), предупреждение имеет правильное значение

alert("data = "+data); 
req.send(data); 

но тзд от insterter просто пусто. Я не знаю почему. Пожалуйста помоги. Я хотел бы исправить этот код.

var msg = req.responseText; 
     alert("msg = "+msg); 

Почему причина в том, что msg имеет значение null?


@WebServlet("/Serwlet") 
public class Serwlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
static String KOD = 

"<html>"+ 
"<head>"+ 
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1250\">"+ 
"<title>Testowanie</title>"+ 
"<script type=\"text/javascript\" language=\"javascript\" src=\"servletD2Script.js\"></script>"+ 
"</head>"+ 
"<body>"+ 
"<div id=\"msg1\">Pierwsza suma</div>"+ 
"<div id=\"msg2\">Pierwsza suma</div>"+ 
"<center><h2>Testowanie parametrów</h2></center>"+ 
"<hr>"+ 
"<form method=\"get\" action=\"Serwlet\">"+ 
"p1<input type=\"text\" size=\"50\" name=\"p1\" onblur=\"validate()\"><br>"+ 
"p2<input type=\"text\" size=\"50\" name=\"p2\" onblur=\"validate()\"><br>"+ 
"<br><input type=\"submit\" value=\"Wyślij formularz by GET\">"+ 
"</form>"+ 
"</hr>"+ 
"<hr>"+ 
"<form method=\"post\" action=\"Serwlet\">"+ 
"p3<input type=\"text\" size=\"50\" name=\"p3\" onblur=\"funkcja()\"><br>"+ 
"p4<input type=\"text\" size=\"50\" name=\"p4\" onblur=\"funkcja()\"><br>"+ 
"<br><input type=\"submit\" value=\"Wyślij formularz by POST\">"+ 
"</form>"+ 
"</hr>"+ 

"</body></html>"; 

public Serwlet() { 
    super(); 

} 
static boolean raz = true; 
private void serviceRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     response.setContentType("text/html"); 
     response.setHeader("Cache-Control", "no-cache"); 
     PrintWriter out = response.getWriter(); 
     if(raz){out.print(Serwlet.KOD);raz = false;} 
     String name = request.getParameter("name"); // dostaję nazwisko 
     String org = ""; //jakas wartosc 
     out.write(org != null ? org : ""); // zwracam organizację lub pusty napis, jesli nie znam nazwiska 
} 


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    serviceRequest(request, response); 
} 


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    serviceRequest(request, response); 
} 

} 

var req; 

function validate() { 
//var idField = document.getElementById("name"); 
var wrt1 = document.getElementById("p1").value; 
var wrt2 = document.getElementById("p2").value; 
var data = eval(wrt1)+eval(wrt2)+""; 

if (typeof XMLHttpRequest != "undefined") { 
    req = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
var url = "Serwlet"; 
req.open("POST", url, true);  
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
alert("data = "+data); 
req.send(data); 
req.onreadystatechange = inserter; 
} 




function inserter() { 
if (req.readyState == 4) { 
    if (req.status == 200) { 
     var msg = req.responseText; 
     alert("msg = "+msg); 
     if (msg == "") { 
      document.getElementById("msg1").innerHTML = "<div style=\"color:red\">"+"MSG WAS EMPTY"+"</div>"; 
      //document.getElementById("msg1").value = "blabla"; 
     } 
     else 
      document.getElementById("msg1").innerHTML = "<div style=\"color:red\">"+msg+"</div>"; 
      //document.getElementById("msg1").value = "COOOO JEST"; 
    } 
} 
} 

ЭТА часть кода всегда вызывается MSG IS ""

if (msg == "") { 
     document.getElementById("msg1").innerHTML = "<div style=\"color:red\">"+"MSG WAS EMPTY"+"</div>"; 
     //document.getElementById("msg1").value = "blabla"; 
    } 
+0

Почему вы отметили это как [tag: java]? Кроме того, вы должны показать код, ответственный за создание ответного сообщения. Может быть, он * пуст? –

+0

Возможно, потому что сервлет возвращает пустой ответ. Вы должны опубликовать соответствующую часть своего класса '' Serwlet''. –

+0

Я отредактировал сообщение. – Yoda

ответ

0

raz кажется верным только один раз, так что в следующий раз вы вводите сервлет, который вы не вводите в оператор if и не печатаете Serwlet.KOD.

Тогда я не понимаю, что:

String org = ""; //jakas wartosc 
    out.write(org != null ? org : "") 

Он всегда выводит пустую строку, это бесполезно.

Также целесообразно завершить метод serviceRequest с помощью out.close();.

+0

Изменено. Это ничего не меняет проблему заключается в том, что данные var (validator()) имеют значение и msg (insterter) не имеет;/ – Yoda

+0

Что вы изменили точно? Вы удалили 'raz = false' в if-statement? –

+0

И что вы ожидаете от 'data' на сервере? Вы даже не используете его. И вы должны отправить его с помощью 'req.send (" data = "+ data);', а затем получить его с помощью 'request.getParameter (" data ")' –

Смежные вопросы