JQuery中ajax不能解析json

开源中国合格公民 发布于 2015/10/11 14:12
阅读 714
收藏 2
Action:
@Controller
@Scope("prototype")
@Namespace("/")
@ParentPackage("json-default")
public class OaAction extends ActionSupport
private String name;
private String pass;
private String msg;
@Action(value="/login",
       results={@Result(name="success",location="/main.jsp"),
                @Result(name = "login",type="json") })
public String login()
{
    Map<String,Object> map = new HashMap<String,Object>();
    if(name=="经理1" && pass=="123456")
    {
        //将数据存储在map里,再转换成json类型数据,也可以自己手动构造json类型数据
        map.put("flag","true");
        map.put("info","欢迎登陆");
        JSONObject json = JSONObject.fromObject(map);//将map对象转换成json类型数据
        msg = json.toString();//给msg赋值,传递给页面
        return SUCCESS;
    }
    else
    {
        map.put("flag","false");

        map.put("info","用户名或者密码错误");

//将map对象转换成json类型数据,在此处打断点json有以下两个属性

nullObject : null;

propeties:{flag=false, info=用户名或者密码错误}

        JSONObject json = JSONObject.fromObject(map);
        msg = json.toString();//给msg赋值,传递给页面
        return "login";
    }
}
@JSON
public String getMsg()
 {
   return msg;
 }
public void setMsg(String msg)
{
  this.msg = msg;
}
public void setName(String name)
{
    this.name = name;
}
public String getName()
{
    return name;
}
public String getPass()
{
    return pass;
}
public void setPass(String pass)
{
    this.pass = pass;
}

jsp:

<div id="lg">
    <input type="text" name="username" id="uname"/>
    <input type="password" name="password" id="password"/>
    <input type="submit" class="login-sub" value="" id="lgbtn"/> <br />
    <div id="msg"></div>
</div>
$(function(){
$('#lgbtn').click(function(){
    var name=document.getElementById("uname").value;
    var pass=document.getElementById("password").value;
    $.ajax
    ({
        url:"login.action",
        dataType:"json",
        type:"post",
        data:"name="+name+"&pass="+pass,
        async:false,
        success:function(data)
        {
            //将数据转换成json类型,可以把data用alert()输出出来看看到底是什么样的结构
           alert(data);//弹出对话框的内容为:Object object
           var d = eval('('+data+')');
           alert(""+d.flag+"");    //没有弹出对话框                        
           alert(""+d.info+"");                 
        },
        error:function()
        {
           alert("请求失败");//没有报请求失败
        }
    });          
});
});

加载中
0
南漂一卒
南漂一卒
jQuery AJAX 请求的 datatype 你已经设为 JSON 了,回调中接收的参数已转化为 JS 对象,无需手动转换~[4](alert 只能显示字符串,把对象传进去会自动调用对象的 toString() 方法,自然显示 [object Object])
开源中国合格公民
开源中国合格公民
谢谢啊!已经修改好了!把JSONObject json这个json传过去就可以了,然后alert(data.flag);就可以了
开源中国合格公民
开源中国合格公民
如果这样改//弹出对话框的内容为:undefined success:function(data) { alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出 },
0
开源中国合格公民
开源中国合格公民

引用来自“南漂一卒”的评论

jQuery AJAX 请求的 datatype 你已经设为 JSON 了,回调中接收的参数已转化为 JS 对象,无需手动转换~[4](alert 只能显示字符串,把对象传进去会自动调用对象的 toString() 方法,自然显示 [object Object])

如果这样改//弹出对话框的内容为:undefined

success:function(data)

        {
           alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出内容     
        },
0
元网互联
元网互联

加上这么一句话:

$.ajaxSetup({  
	dataType: 'json',
	contentType:'application/x-www-form-urlencoded;charset=UTF-8',
	cache:false
});



0
PeckZeg
PeckZeg
`alert(JSON.stringify(data))`
0
番茄酱汁
番茄酱汁
已经是你要的格式了
0
jers
jers
直接反回map 去掉datetype
返回顶部
顶部