【问题标题】:ResponseText is null even though it should be set JavaScriptResponseText 为 null,即使它应该设置为 JavaScript
【发布时间】:2012-05-19 08:00:40
【问题描述】:

我有一个大问题,我的代码中没有发现任何错误。该程序应从字段p1p2 中添加两个值,并将它们上传到站点,而无需重新加载整个页面。我是用简单的 javascript 完成的,但我想使用 AJAX。一切都已完成,但某处存在小错误。

我看validate()insterter(),警报具有适当的价值

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

但是来自 insterter 的 msg 只是空的。我不知道为什么。请帮忙。我想更正这段代码。

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

为什么 msg 为空?


@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 是 ""

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

【问题讨论】:

  • 你为什么把它标记为java?另外,您应该显示负责生成回复消息的代码。也许它空的?
  • 可能是因为 servlet 返回一个空响应。您应该发布"Serwlet" 课程的相关部分。
  • 只是一个疯狂的猜测 - 不应该在发送数据之前分配 onreadystatechange 事件侦听器,即在事件之前?

标签: java javascript ajax servlets


【解决方案1】:

raz 似乎只有一次为真,所以下次你进入 servlet 时不要在 if 语句中输入,也不要打印 Serwlet.KOD

那我就不明白了:

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

它总是打印一个空字符串,没用。

另外,以out.close(); 结束serviceRequest 方法也是一个好习惯。

【讨论】:

  • 已更改。它不会改变任何问题,问题是 var data(validator()) 有值而 msg(insterter) 没有;/
  • 你到底做了什么改变?您在 if 语句中删除了raz=false
  • 您希望在服务器上使用data 做什么?你甚至不用它。你应该用req.send("data="+data);发送它,然后用request.getParameter("data")检索它
  • 如果我没有这个 raz=false 则该站点将被复制(printWriter 将在站点底部再次写入相同的内容)。
  • req.send("data="+data);,然后用 request.getParameter("data") 检索它有效(该值出现在网站上)但我有很多错误。第 38 行。对象不服务于特定方法 wklej.org/id/756249
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2023-04-04
  • 1970-01-01
  • 2018-11-18
  • 2021-12-05
  • 2020-11-14
  • 1970-01-01
相关资源
最近更新 更多