关于ajax请求action回调函数处理返回值的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于ajax请求action回调函数处理返回值的问题相关的知识,希望对你有一定的参考价值。
java代码:
public class AjaxAction extends ActionSupport
public void getDept()
(中间省略,只写了处理结果)
String str="1":"Dname":"光电信息科学技术学院","2":"Dname":"化学化工学院";
out.println("str");
out.close();
struts.xml代码:
<action name="getDept"
class="AjaxAction" method="getDept">
</action>
js代码
$(document).ready(function getDept()
$.get("getDept", null, function (data)
var obj = eval(data);
)
);
为什么回调函数中收到的data值是一个document对象而不是我想要的那个str字符串呢?(在firebug中检测到的)
麻烦各位资深大师帮忙解答一下!
function checkExist()
//使用 Ajax 的方式 判断数据库中是否有该用户的名字(注册的时候)
alert($("#name").val());
$("#nameW").empty();
var url = "regiValiAndLoginAjax!isNameExist";
//获取表单值,并以json的数据形式保存到params中
var params = name:$("#name").val()
//使用$.post方式
$.post(
url, //服务器要接受的url
params, //传递的参数
function cbf(data) //服务器返回后执行的函数 参数 data保存的就是服务器发送到客户端的数据
//alert(data);
var member = eval("("+data+")"); //包数据解析为json 格式
isExist = member.nameExist;
if(member.nameExist == "false")
isNameT = "true";
namePass = true;
//$("div[id!='nameW4']").empty();
alert("恭喜你,用户名可用的啦");
$("#nameW4").show("slow");
$("#nameW3").hide("slow");
$("#name").attr("disabled", true);
$("nameW1").css("color", "#333333");
else
alert("用户名已存在,请重新输入");
namePass = false;
$("#nameW3").show("slow");
$("#nameW4").hide("slow");
isNameT = "false";
,
"json" //数据传递的类型 json
);
上面是 jsp 的页面代码:
下面是java中的代码;
//以下是ajax的访问的方法开始
public String isNameExist()//判断用户的注册名在数据库中是否存在的 啦
vali = new Validation();
name = this.getName();
System.out.println("userName = " + name);
boolean exist = false;
String isExist = "false";
try
exist = this.userService.existsName(name);
catch (Exception e)
// TODO: handle exception
e.printStackTrace();
if(exist)
isExist = "true";
else
this.getSession().put("name", this.getName());
System.out.println(this.getSession().get("name").toString());
vali.setNameExist(isExist);
JSONObject jo = JSONObject.fromObject(vali);
result = jo.toString();
System.out.println(result);
return SUCCESS;
其实json格式对数据的封装是很方便的,,ajax + jquery + json 应该是完美的搭配吧 ,,, 参考技术A 1:out.println("str"); //去掉引号
2:var obj = eval(data); //在这里你把data值转换成了对象
如果要直接返回str:var obj = data;追问
嗯,我原来是那样输出的,在后台输出的那个字符串是:"1":"Dname":"光电信息科学技术学院","2":"Dname":"化学化工学院";
我监控的是data这个变量,而不是obj这个变量,监控obj这个变量的时候显示未定义
var obj = ...这不是声明了吗?怎么会未定义?肯定是其它地方出错了,
参考技术B $.get("getDept", null, function (data)var obj = eval(data);
,json)追问
我改了,加上之后那个回调函数直接不能执
关于form表单提交数据后不跳转页面+ajax接收返回值的处理
1.前台的form表单建立,注意action、enctype的内容,
2.通过添加一个隐藏的iframe标签使form的target指向iframe来达到不跳转页面的效果,同时需要在js里获取iframe里的内容(即后台利用GSON传回来的返回值)。
代码部分:
<form id="form1" action="../PublishPostingsServlet" enctype="multipart/form-data" method="POST" target="iframe_userInterface">
<!-- 正文区域--多行文本框 -->
<textarea name="ptext" id="ptext" cols="30" rows="10"></textarea>
<!-- 图片和标签选择区域 -->
<ul id="ptext_ul">
<li>
<a id="photo" href="javaScript:;" onclick="showPic();">
<em class="iconfont"></em>图片
</a>
</li>
<li id="lable">
<a href="javaScript:;" onclick="showLable();">
<em class="iconfont"></em>标签
</a>
</li>
</ul>
<div id="tupianqu">
<span class="ziti">本地上传</span>
<input id="tupian_btn" name="tupian_btn" type="file" accept="image/gif,image/jpeg,image/jpg,image/png" onchange="selectFile();" />
</div>
<button id="ptext_btn" type="submit">发布</button>
</form>
<iframe id="iframe_userInterface" name="iframe_userInterface" style="display: none;"></iframe>
3.js里获取文本代码如下:
$("#iframe_userInterface").load(function(){
var text = $(this).contents().find("body").text();//获取iframe里的内容
console.log(text);//打印iframe页面的内容
}
})
可以利用text来进行验证
后台要接收form表单传过去的数据,并且利用GSON将返回值传回到iframe里,
代码:
@WebServlet("/PublishPostingsServlet")
@MultipartConfig // 标识Servlet支持文件上传
public class PublishPostingsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;// 主要用于版本控制
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置数据的编码方式为utf-8
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 返回的是项目在tomcat中的实际发布运行的根路径
String savePath = request.getServletContext().getRealPath("/picture");
Part part = request.getPart("tupian_btn");
String header = part.getHeader("content-disposition");// 获取请求头--form-data; name="tupian_btn"; filename=""
String fileName = getFileName(header);// 获取文件名
System.out.println("文件名:" + fileName);
part.write(savePath + File.separator + fileName);// 获取文件类型
/*判断登录状态*/
String id = null;
int result = 0;// 返回给前端的结果
HttpSession session = request.getSession();
id = (String) session.getAttribute("Account");
System.out.println("session里的id:" + id);
if (id == null) {
result = 4;// 当id为空的时候,登录失效,返回4
}
String ptext = request.getParameter("ptext");// 获取前台页面传递的参数
String label = Tools.getTable(ptext);
String ptime = Tools.getTime();
while (result == 0) {
result = PostingsService.publishPostings(id, ptext, ptime, label, fileName);// result接收数据在处理的结果1或2或3
}
Gson gson = new Gson();
String postinfsInfo = gson.toJson(result);// 定义postingsInfo存放GSON要传回的数据
response.getWriter().write(postinfsInfo);// 返回数据
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);// 调用doGet
}
}
以上是关于关于ajax请求action回调函数处理返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章