[英]XmlHttpRequest status=0
I have this ajax call from a javascript file and I want to pass as a parameter the id of the user that I want to delete: 我有一个来自javascript文件的ajax调用,我想将要删除的用户ID作为参数传递:
function eliminaUtente(id,nome){
if (confirm("Sei sicuro di voler eliminare l'utente "
+ nome
+ "?")) {
var xmlHttp2 = new XMLHttpRequest();
xmlHttp2.open("POST", "EliminaUtente", true);
xmlHttp2.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
var params2 = "id=" + id;
xmlHttp2.send(params2);
xmlHttp2.onreadystatechange = function() {
if (xmlHttp2.readyState == 4)
{
alert(xmlHttp2.status); <-----------this prints always 0!
if (xmlHttp2.status == 200) //
{
alert("utente eliminato!");
} else {
alert("An error occurred while communicating with server.");
}
}
};
} } }}
in the correspondant Servlet called EliminaUtente i have this code: 在名为EliminaUtente的对应Servlet中,我有以下代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
System.out.println(id);
String query = "delete from utente where idutente=" + id;
System.out.println(query);
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager
.getConnection("jdbc:mysql://localhost/Spinning?user=root");
PreparedStatement prest = con.prepareStatement(query);
prest.executeUpdate();
response.setContentType("text/plain");
PrintWriter ajaxWriter = response.getWriter();
ajaxWriter.print("ok");
ajaxWriter.flush();
ajaxWriter.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
response.setContentType("text/plain");
PrintWriter ajaxWriter = response.getWriter();
ajaxWriter.print("ko");
ajaxWriter.flush();
ajaxWriter.close();
}
}
} }
I can't understand where is the problem...can you help me please? 我不明白问题出在哪里...可以帮我吗? ;)
;)
I try your code and change a little bit i want to explain what did i and what i learn from it.I read some source. 我尝试您的代码并作一些更改,我想解释一下我从我那里学到了什么。我读了一些资料。 First i read XMLHttpRequest object and onreadyState event.
首先,我阅读XMLHttpRequest对象和onreadyState事件。 I implement your example both
PUT
and GET
action method. 我将同时实现您的示例
PUT
和GET
操作方法。
web.xml web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>com.test.testServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
</web-app>
testServlet.java testServlet.java
package com.test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class testServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
/*super.doPost(req, resp);*/
String strId = req.getParameter("id");
System.out.println(strId);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doGet(req, resp);
String strId = req.getParameter("id");
System.out.println(strId);
}
}
and main part NewFile.jsp 和主要部分NewFile.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" value="Submit" onclick="eliminaUtente('1')" width="100%" />
</body>
<script language="javascript" type="text/javascript">
function eliminaUtente(id) {
var xmlHttp = new XMLHttpRequest();
var url = "test/NewFile.jsp?id=" + id;
xmlHttp.open("POST", url, true);
xmlHttp.send(url);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
alert("utente eliminato!");
} else {
alert("An error occurred while communicating with server.");
}
};
}
</script>
</html>
with this way i write the parameter 1(i hardcode it in jsp file method invoke) and write it to console, the first thing in here the difference your code and mine i remove the xmlHttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
通过这种方式,我编写了参数1(我在jsp文件方法调用中对其进行了硬编码)并将其写入控制台,这里的第一件事就是您的代码与我的代码不同,我删除了
xmlHttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
because if the method type is POST
default encryption is this. 因为如果方法类型是
POST
默认加密是这个。
enctype = content-type [CI]
This attribute specifies the content type used to submit the form to the server (when the value of method is "post"). The default value for this attribute is "application/x-www-form-urlencoded". The value "multipart/form-data" should be used in combination with the INPUT element, type="file".
POST
. POST
设置默认值就可以。 open(method, url, async, user, password)
here async is the parameter which means if it is false don't wait a response from server implement the other line when response is come it will run. open(method, url, async, user, password)
这里的async是参数,这意味着如果它为false,请不要等待服务器实现的响应,否则响应将在另一行运行。 If it is true wait until response is come. Lastly i try it with GET
. 最后,我尝试使用
GET
。 If you want use it with GET
you should add xmlHttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
如果要与
GET
一起使用,则应添加xmlHttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
code for encryption and remove the url
parameter from send()
method. 代码进行加密,并从
send()
方法中删除url
参数。
function eliminaUtente(id) { 函数eliminaUtente(id){
var xmlHttp = new XMLHttpRequest(); var url = "test/NewFile.jsp?id=" + id; xmlHttp.open("GET", url, true); xmlHttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlHttp.send(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { alert("utente eliminato!"); } else { alert("An error occurred while communicating with server."); } }; }
Note: I try this code in firefox, i create xmlHttpRequest object. 注意:我在Firefox中尝试此代码,创建了xmlHttpRequest对象。 For all browser(include IE6) sure you know use:
对于所有浏览器(包括IE6),请确保您知道使用:
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
typo? 错字?
alert(xmlHttp2.status);
<-----------this prints always 0! <-----------这将始终打印0! Now has "2'
现在有“ 2”
问题是我必须在这一行中输入false:
xmlHttp2.open("POST", "EliminaUtente", FALSE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.