用ajax现在要向后台每隔一段时间传递一次数据,以测试当前页面有没有被关闭;惹关闭则不再传送数据;用ajax实现代码如下:
<script type="text/javascript">
setInterval("send_request(param)",10000);
var http_request;
if(window.XMLHttpRequest){//如果是Mozilla
http_request=new XMLHttpRequest();
if(http_request.overrideMImeType){//设置Mime类别
http_request.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){//ie浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
var param="00分10秒";
function send_request(param){
// createXMLHttpRequest();
http_request.open("post","../trainServlet",true);
http_request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http_request.onreadystatechange = processRequest;
http_request.send(param);
}
function processRequest(){
if(http_request.readyState==4){
if(http_request.status==200 || http_request.status==0){
document.getElementById("cs").innerHTML=http_request.responseText();
} if(http_request.status==500 ){
// document.getElementById("cs").innerHTML=http_request.responseText();
var res=http_request.responseText();
window.alert(res);
}
else{
alert("所请求的页面有异常"+http_request.status);
}
}
}</script>但是每次都报500的错误,还有那个cs是一个隐藏的文本框,<input type="hidden" name="cs" id="cs" value="00分10秒">只是为了传递数据到后台,但是为什么每次都报错那?不知道是哪里出的错,谁能帮帮我?
<script type="text/javascript">
setInterval("send_request(param)",10000);
var http_request;
if(window.XMLHttpRequest){//如果是Mozilla
http_request=new XMLHttpRequest();
if(http_request.overrideMImeType){//设置Mime类别
http_request.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){//ie浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
var param="00分10秒";
function send_request(param){
// createXMLHttpRequest();
http_request.open("post","../trainServlet",true);
http_request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http_request.onreadystatechange = processRequest;
http_request.send(param);
}
function processRequest(){
if(http_request.readyState==4){
if(http_request.status==200 || http_request.status==0){
document.getElementById("cs").innerHTML=http_request.responseText();
} if(http_request.status==500 ){
// document.getElementById("cs").innerHTML=http_request.responseText();
var res=http_request.responseText();
window.alert(res);
}
else{
alert("所请求的页面有异常"+http_request.status);
}
}
}</script>但是每次都报500的错误,还有那个cs是一个隐藏的文本框,<input type="hidden" name="cs" id="cs" value="00分10秒">只是为了传递数据到后台,但是为什么每次都报错那?不知道是哪里出的错,谁能帮帮我?
500错误你不会不知道是什么原因吧?
如果知道的话你就应该知道从哪里开始找错误。
既然报错了,那么这报错就是提示你应该从哪里开始找错,这个你怎么没发上来呢?
只是猜测,我感觉你后台没有对应的成员变量导致传值失败。
首先你得判断一下是否进入到后台action里,然后判断action整个过程是否报异常,然后再检查前台页面。如果参数不需要手动进行修改的话,我感觉还是不用input更恰当一些。当然这个没有什么规定。
pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD> <TITLE>在线培训</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background: #DEF8F8
}
-->
</style>
<script language="javascript" type="text/javascript"><!--
function time(){
var date = new Date();
var hour = date.getHours();
if(hour>=0 && hour<=9){
hour="0"+hour;
}
var mins = date.getMinutes();
if (mins >= 0 && mins <= 9) {
mins = "0" + mins;
}
var sec = date.getSeconds();
if (sec >= 0 && sec <= 9) {
sec = "0" + sec;
}
document.getElementById("time").value = hour + ":" + mins + ":" + sec+ "";
}
done = 0;
step = 4
function anim(yp,yk)
{
if(document.layers)
document.layers["napis"].top=yp;
else
document.all["napis"].style.top=yp;
if(yp>yk) step = -4
if(yp<60) step = 4
setTimeout('anim('+(yp+step)+','+yk+')', 35);
}
//定义一个函数 调整层的位置
function start()
{
if(done)
return done = 1;
if(navigator.appName=="Netscape") {
document.napis.left=innerWidth/2 - 145;
anim(60,innerHeight - 60)
}
else {
napis.style.left=11;
anim(60,document.body.offsetHeight - 60)
}
setTimeout('start()',10);
}
//--><!-- Begin
pageOpen = new Date();
function bye() {
pageClose = new Date();
minutes = (pageClose.getMinutes() - pageOpen.getMinutes());
seconds = (pageClose.getSeconds() - pageOpen.getSeconds());
if(minutes<0)
{minutes+=60;}if(seconds<0)
{minutes--;seconds+=60;}
if(seconds>=0 && seconds<=9){
seconds="0"+seconds;
}
//一定要注意这minutes和senconds的顺序。要不容易出错
if(minutes>=0 && minutes<=9){
minutes="0"+minutes;
}
alert('本次培训时间' + minutes+"分"+seconds+"秒," + '祝您工作愉快!');
document.getElementById("countTime").value = minutes +"分"+seconds+"秒"
//为什么定义后不自动关闭?
if(minutes==1){
self.close();
} } function closeWindow(){
i=i-1;
if(i>0){
setTimeout("closeWindow();",1000);
}else{
this.window.opener=null;
window.close();
}
}
var i=5
closeWindow(); // End
-->
</script>
<!--<script type="text/javascript">
setInterval("send_request(param)",10000);
var http_request;
if(window.XMLHttpRequest){//如果是Mozilla
http_request=new XMLHttpRequest();
if(http_request.overrideMImeType){//设置Mime类别
http_request.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){//ie浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
var param="00分10秒";
function send_request(param){
// createXMLHttpRequest();
http_request.open("post","../trainServlet",true);
http_request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http_request.onreadystatechange = processRequest;
http_request.send(param);
}
function processRequest(){
if(http_request.readyState==4){
if(http_request.status==200 || http_request.status==0){
document.getElementById("cs").innerHTML=http_request.responseText();
} if(http_request.status==500 ){
// document.getElementById("cs").innerHTML=http_request.responseText();
var res=http_request.responseText();
window.alert(res);
}
else{
alert("所请求的页面有异常"+http_request.status);
}
}
}</script>
-->
</HEAD>
<BODY onload="time();test();"> <form method="post" action="../trainServlet" id="form1">
<div id="napis" style="position: absolute; top: -50;">
<p>
</p>
</div>
<input type="hidden" name="cs" id="cs" value="00分10秒">
<input type="hidden" name="countTime" id="countTime" value="0" />
<div id="div1">
<INPUT TYPE="submit" VALUE="结束培训" onclick="bye();">
</div>
<input type="text" id="time" name="time" value="" />
预计本次培训时间:40分钟
<input type="hidden" name="trainTime" value="40" />
</form>
</BODY>
<iframe name="wf" id="wf" style="width: 90%; height: 800px; top: 30px;"></iframe>
</HTML>
<script type="text/javascript">
function test() {
//window.open("bmxy.doc");
document.getElementById("wf").src = "bmxy.doc";
document.getElementById("wf").style.display = ""
}
function startTime(){
document.getElementById("startTime").value=new Date();
}
function custom_close() {
if (confirm("您确定要关闭本页吗?")) {
//window.opener=null;
//window.open('','_self');
window.close();
} else {
}
}
</script>
/**************************
var param="00分10秒";
function send_request(param){
// createXMLHttpRequest();
http_request.open("post","../trainServlet",true);
http_request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http_request.onreadystatechange = processRequest;
http_request.send('countTime'+param);
**************************
countTime是我自己获取前台所用的参数,这样就可以了。之后又遇到post乱码的问题,不过已经解决、
结论:ajax再用post方式进行提交时,会出现乱码;是因为ajax默认是采用utf-8的方式的;解决方法:首先在头部加入 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;然后在后台编码时候注意不再是request.setCharacterEncoding("GBK");而是要将其改为:request.setCharacterEncoding("utf-8");