ajax返回的信息分类处理

ky7670 2011-08-15 11:58:51
ajax初学者:
AjaxUtil.js
//ajax引擎对象
var xmlHttp;

//ajax请求返回的信息存放的对象
var returnMessage;

//创建ajax引擎对象
function createXmlHttp() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
if (xmlHttp.overrideMimeType) {
xmlHttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("不能创建XmlHttpRequest");
}
}
}
}

/**
* @param method:请求方式
* @param url:请求路径
* @param flag:请求模式 true表示异步模式
* @param params:请求参数字符串
* @param writeMessage:处理返回信息的函数
* @return 无返回结果
*/
function sendAjaxRequest(method,url,flag,params,writeMessage){
createXmlHttp();
if(method == "get"){
url = encodeURI(url);
}
xmlHttp.open(method, url, flag);
if(method == "post"){
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
xmlHttp.send(params);

xmlHttp.onreadystatechange = function (){
if(xmlHttp.readyState == 4){

if(xmlHttp.status == 200){
returnMessage = xmlHttp.responseText;
}else if(xmlHttp.status == 404){
returnMessage = "请求路径错误";
}else if(xmlHttp.status == 500){
returnMessage = "服务器内部错误";
}else{
returnMessage = "异常";
}

writeMessage();
}
};
}

pinglun.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>评论</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function changeCode(){
document.getElementById("yzm").src = "yanzhengma_image.jsp?rand" + Math.random();
}
</script>
<script type="text/javascript" src="js/AjaxUtil.js"></script>
<script type="text/javascript">
function addComment(){
var content = document.getElementById("content").value;
var irand = document.getElementById("irand").value;

var url = "commentManagerServlet?flag=1&content=" + content + "&irand=" + irand;
sendAjaxRequest("get",url,true,null,writeMessage);
}


function writeMessage(){
if(returnMessage == "randError"){
document.getElementById("yzmError").innerHTML = "<img src='images/wrong.jpg'/><b style='color:red'>验证码错误</b>";
}else if(returnMessage == "error"){
alert("添加评论失败");
}else{
document.getElementById("but").disabled = true;
}
}
</script>
</head>

<body>
<h1>视频正在播放中......</h1>
<h1>视频正在播放中......</h1>
<h1>视频正在播放中......</h1>
<h1>视频正在播放中......</h1>
<br>
<textarea rows="7" cols="60" id="content" name="content"></textarea>
<br>
验证码:<input style="height: 25px;width: 70px;" type="text" id="irand" name="irand"/>
<img id="yzm" src="yanzhengma_image.jsp" onclick="changeCode()"/>
<span id="yzmError"></span>
<br>
<input id="but" type="button" value="增加评论" onclick="addComment()"/>
<hr>
评论内容:<br>
</body>
</html>

CommentManagerServlet.java Servlet
package com.kouy.ajax.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.kouy.ajax.dao.CommentDao;
import com.kouy.ajax.po.Comment;

public class CommentManagerServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String flag = request.getParameter("flag");
if("1".equals(flag)){
addComment(request, response);
}

}

public void addComment(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");

String content = request.getParameter("content");
String irand = request.getParameter("irand");
String rand = (String) request.getSession().getAttribute("rand");

String message = "";
if(!rand.equalsIgnoreCase(irand)){
message = "randError";
}else{
Comment comment = new Comment();
comment.setVideoid(7670);
comment.setUserid(1987);
comment.setContent(content);

boolean flag = CommentDao.getInstance().addComment(comment);

if(flag){
message = "success";
}else{
message = "error";
}
}

response.setCharacterEncoding("utf-8");
response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println(message);
out.flush();
out.close();
}
}



当在pinglun.jsp页面输入一个错误的验证码在writeMessage()函数中可以的到randError,开始比较 if(returnMessage == "randError") 结果为false
...全文
174 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ky7670 2011-08-18
  • 打赏
  • 举报
回复
showbo
谢谢了
ky7670 2011-08-18
  • 打赏
  • 举报
回复
showbo
谢谢了
Go 旅城通票 2011-08-17
  • 打赏
  • 举报
回复
eval是动态执行代码的,你返回json格式的字符串才可以使用eval,这样如果字符串前后出现空白符号也不怕了。

你要修改返回的内容才能eval

eg
        if(!rand.equalsIgnoreCase(irand)){
message = "{msg:'randError'}";//////////
}else{
Comment comment = new Comment();
comment.setVideoid(7670);
comment.setUserid(1987);
comment.setContent(content);

boolean flag = CommentDao.getInstance().addComment(comment);

if(flag){
message = "{msg:'success'}";////////
}else{
message = "{msg:'error'}";//////
}
}

function writeMessage(){

var o = eval('('+returnMessage+')');////
alert(o.msg.length)

}

ky7670 2011-08-16
  • 打赏
  • 举报
回复


function writeMessage(){
var t = returnMessage;
for(var i=0;i<t.length;i++){
alert(t.charCodeAt(i));
}
}


//这是结果114 97 110 110 69 114 114 111 114 13 10
Go 旅城通票 2011-08-16
  • 打赏
  • 举报
回复
应该是空白符号的问题。。
//你增加下面这句试试,如果没有多余的字符,输出循序应该是下面的
//114|101|116|117|114|110|77|101|115|115|97|103|101|

//如果有多余的,你看下charcode是什么,发出来看看
for(var t=0;i<t.length;i++)alert(t.charCodeAt(i))

ky7670 2011-08-16
  • 打赏
  • 举报
回复
function writeMessage(){
var t = "" + returnMessage;
t = trim(t);
alert("\"" + t + "\"");//结果为"randEror"
alert(returnMessage == "randError");//结果为 false??????
if(returnMessage == "randError"){
document.getElementById("yzmError").innerHTML = "<img src='images/wrong.jpg'/><b style='color:red'>验证码错误</b>";
}else if(returnMessage == "error"){
alert("添加评论失败");
}else{
document.getElementById("but").disabled = true;
}
}
ky7670 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 showbo 的回复:]
更正下正则


JScript code

function trim(v){return v.replace(/^\s*|\s*$/g,'');}
[/Quote]


还是不行啊

我都已经alert("\"" + t + "\"");得到的看出没空格了
可是还是false
ky7670 2011-08-16
  • 打赏
  • 举报
回复
showbo
:
你给的trim()还是不行啊
Go 旅城通票 2011-08-16
  • 打赏
  • 举报
回复
更正下正则

function trim(v){return v.replace(/^\s*|\s*$/g,'');}

ky7670 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ky7670 的回复:]
好像是多了,空格可是trim()后还是不行啊
[/Quote]


ajax初学者:

过几天用jquery
Go 旅城通票 2011-08-16
  • 打赏
  • 举报
回复
你怎么trim的,空白符号不一定就是' '这种,也可能是\b,\t等。。。

你试试这个trim函数
function trim(v){return v.replace(/^\s*|\s*$$/,'');}

function writeMessage(){
returnMessage=trim(returnMessage);///////
alert(returnMessage.length)///输出长度看看,可能存在空白符号,如果不为8,那就是存在空白了
if(returnMessage == "randError"){
document.getElementById("yzmError").innerHTML = "<img src='images/wrong.jpg'/><b style='color:red'>验证码错误</b>";
}else if(returnMessage == "error"){
alert("添加评论失败");
}else{
document.getElementById("but").disabled = true;
}
}

smzen 2011-08-16
  • 打赏
  • 举报
回复
你为什么不用jquery
ky7670 2011-08-16
  • 打赏
  • 举报
回复
好像是多了,空格可是trim()后还是不行啊
Go 旅城通票 2011-08-16
  • 打赏
  • 举报
回复
function writeMessage(){
alert(returnMessage.length)///输出长度看看,可能存在空白符号,如果不为8,那就是存在空白了
if(returnMessage == "randError"){
document.getElementById("yzmError").innerHTML = "<img src='images/wrong.jpg'/><b style='color:red'>验证码错误</b>";
}else if(returnMessage == "error"){
alert("添加评论失败");
}else{
document.getElementById("but").disabled = true;
}
}
ky7670 2011-08-16
  • 打赏
  • 举报
回复
114 97 110 100 69 114 114 111 114
对了,但是这里就需要这么复杂吗?
不同的返回值,进行不同的处理,还要这么来取

showbo:我们老师用的eval()这个函数,什么也没去
可以用eval()这个函数???吗


function trim(v){
return v.replace(/^\s*|\s*$/g,'');
}

function writeMessage(){
var t = trim(returnMessage);

for(var i=0;i<t.length;i++){
alert(t.charCodeAt(i));
}
alert(t.length);
}
Go 旅城通票 2011-08-16
  • 打赏
  • 举报
回复
13 10是\r和\n的编码

说明你返回值的最后多了一个回车了,你用我发的最后那个trim函数绝对能去掉空格,\r,\n这种空白符号的,你没用错吧?

var s='err\r\n';
alert(s.length)//5
function trim(v){return v.replace(/^\s*|\s*$/g,'');}
s=trim(s)
alert(s.length)//3


ky7670 2011-08-16
  • 打赏
  • 举报
回复
我感觉这应该是一个简单的问题啊,只是我是初学者,就是在servlet理out.println("返回值");
再根据不同的返回值,进行不同的处理,就折磨简单啊



好像我们老师用了一个eval()函数,与这个函数有关吗

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧