使用jQuery的ajax提交表单后台返回的JSON数据在IE8下无法接收,总是undefined,其他浏览器却正常,跪求大神指教!

SHen丶 2014-05-23 10:46:24
JAVA代码:

package com.goldweb.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.goldweb.common.StrutsBaseAction;
import com.goldweb.model.AutoUserModel;
import com.goldweb.service.IUserService;

/**
* 用户登录
*
* @author Administrator
*
*/
@SuppressWarnings("serial")
@Controller
@ParentPackage("json-default")
@Namespace("/")
public class UserLoginAction extends StrutsBaseAction {

private Boolean isOk = false;
private String msg = "";
@Autowired
private IUserService userService;
private AutoUserModel u;

/**
* 登录测试
*
* @return
*/
@Action(value = "userLogin", results = {
@Result(name = "success", type = "json"),
@Result(name = "login", type = "json") },
params = { "contentType", "text/html" })
public String userLogin() {
try {
System.out.println(getuLoginName() + ", " + getuLoginPswd());
u = userService.userLogin(getuLoginName(), getuLoginPswd());
if (u == null) {
msg = userService.loginUser(getuLoginName(), getuLoginPswd());
return LOGIN;
}
isOk = true;
msg = "登录成功!";
return SUCCESS;
} catch (Exception e) {
// TODO: handle exception
return LOGIN;
}
}

@JSON
public Boolean getIsOk() {
return isOk;
}

@JSON
public String getMsg() {
return msg;
}

@JSON(serialize = false)
public AutoUserModel getU() {
return u;
}

}

JSP代码:

<%@ page 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>
<title>测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="js/jquery-1.7.2.js" type="text/javascript"></script>
<script src="js/jquery.validate.js" type="text/javascript" ></script>
<script type="text/javascript">
$(function() {
$("#login_btn").click(function() {
$.ajax({
type : "POST",
url : "userLogin.action",
data : $("#loginForm").serialize(),
dataType : "json",
success : function(data) {
setTimeout(alert(data), 200);

//var jsonData = eval("(" + data + ")");
alert(data.msg);
},
error : function() {
alert("error!");
}
});
});
});
</script>

<style>
.fd {
width:500px;
margin:0 auto;
}
.red {
margin-right: 5px;
color: red;
}
</style>

</head>
<body>

<fieldset class="fd">
<legend>用户登录</legend>
<form id="loginForm" method="get" action="">
<p>
<label for="uname">帐号:</label>
<input id="uname" name="uname" type="text" />
<span class="red">*</span>
</p>
<p>
<label for="upswd">密码:</label>
<input id="upswd" name="upswd" type="text" />
<span class="red">*</span>
</p>
<p>
<input type="button" value="登录" id="login_btn"/>
</p>
</form>
</fieldset>

</body>
</html>

struts.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.i18n.encoding" value="utf8" />
</struts>

web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<description>Spring上下文</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<filter>
<description>hibernate Session 过滤器</description>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>loginPassword</param-name>
<param-value>123123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/admindruid/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/admindruid/*</param-value>
</init-param>
<init-param>
<param-name>profileEnable</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>principalSessionName</param-name>
<param-value>abc</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>ImageRedirectFilter</filter-name>
<filter-class>com.goldweb.action.filter.ImageRedirectFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>ImageRedirectFilter</filter-name>
<url-pattern>/images/upload/*</url-pattern>
</filter-mapping>
</web-app>
...全文
4178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33653058 2016-08-27
  • 打赏
  • 举报
回复
楼主解决了吗?我也遇到这种问题了~
Herry-Chan 2016-08-27
  • 打赏
  • 举报
回复
你调试下后端返回的是不是json串,有没有拼装成json串
SHen丶 2014-05-30
  • 打赏
  • 举报
回复
引用 4 楼 anyilaoliu 的回复:
既然都返回了 先用firebug之类的工具 看看返回的是什么 没遇到过有返回值但只有IE8不行的情况 另外从你的代码看 你返回的是json 但是却把eval给注释了... 不知道是不是已经打开试过了
在IE8、IE11、360、火狐、谷歌浏览器测试过了,action返回的JSON在IE8下面是undefined,其余的都可以正常接收。 也就是在IE8下, $.ajax中的success回调函数中的 data 为undefined 然而,我重新用struts2框架重新建一个项目,用配置struts.xml的方式返回json,IE8下又可以接收了。但是我现在的项目是SSH整合的,纠结好久,在网上找了好多答案都行不通。不过还是非常感谢你可以抽时间来看看我的问题。
  • 打赏
  • 举报
回复
应该是ie8和jquery1.7不兼容吧,尝试换别的版本的jquery试试
SHen丶 2014-05-23
  • 打赏
  • 举报
回复
没人吗
再看我一眼 2014-05-23
  • 打赏
  • 举报
回复
引用 4 楼 anyilaoliu 的回复:
既然都返回了 先用firebug之类的工具 看看返回的是什么 没遇到过有返回值但只有IE8不行的情况 另外从你的代码看 你返回的是json 但是却把eval给注释了... 不知道是不是已经打开试过了
抱歉... 看错了 已经写了datatype:json了 应该不需要eval了, 还是先看看返回了什么吧
再看我一眼 2014-05-23
  • 打赏
  • 举报
回复
既然都返回了 先用firebug之类的工具 看看返回的是什么 没遇到过有返回值但只有IE8不行的情况 另外从你的代码看 你返回的是json 但是却把eval给注释了... 不知道是不是已经打开试过了
跳动de指尖 2014-05-23
  • 打赏
  • 举报
回复
引用 2 楼 fangmingshijie 的回复:
应该是ie8和jquery1.7不兼容吧,尝试换别的版本的jquery试试
我认为不是jquery版本的原因,有时候服务端响应json,会给下载。 楼主,建议响应类型为 text/plain 然后 $.parseJson(),

81,092

社区成员

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

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