关于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中检测到的)
麻烦各位资深大师帮忙解答一下!

你用json格式 把 string类型封装成 对象,然后再把json对象解析为 string类型,这样应该就OK了吧,。
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表单建立,注意actionenctype的内容,

2.通过添加一个隐藏的iframe标签使formtarget指向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回调函数处理返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于form表单提交数据后不跳转页面+ajax接收返回值的处理

关于Jquery中ajax介绍

为啥要在ajax里面的请求地址加上callback=

jquery方法返回值问题

个人笔记《知了堂》ajax的get及post请求

ajax使用