2012-05-19 50 views
0

我有一個很大的問題,我在代碼中看不到任何錯誤。該程序應添加p1p2的兩個值,並將其上傳到網站,而無需重新加載整個頁面。我在簡單的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"; 
    } 
} 
} 

這部分代碼總是調用味精 「」

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

爲什麼你把它標記爲[tag:java]?另外,您應該顯示負責生成回覆消息的代碼。也許它*是*空的? –

+0

可能是因爲servlet返回空響應。你應該發佈你的Serwlet類的相關部分。 –

+0

我編輯了帖子。 – Yoda

回答

0

raz似乎是真實的只有一次,所以下次進入次您不在if語句中輸入的servlet並不打印Serwlet.KOD

那我就不明白:

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

它總是打印一個空字符串,也沒用。

此外,最好使用out.close();結束serviceRequest方法。

+0

更改了它。它不會改變任何問題 是var data(validator())有價值,msg(insterter)還沒有;/ – Yoda

+0

你改變了什麼?你在if語句中刪除了'raz = false'? –

+0

你期望在服務器上使用'data'做什麼?你甚至不用它,你應該用'req.send(「data =」+ data);'發送它,然後用'request.getParameter(「data」)檢索它' –