开发者社区> 问答> 正文

JQuery中ajax不能解析json报错

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("请求失败");

//没有报请求失败

        }

    });          

});

});

展开
收起
kun坤 2020-06-03 10:54:28 631 0
1 条回答
写回答
取消 提交回答
  • jQuery AJAX 请求的 datatype 你已经设为 JSON 了,回调中接收的参数已转化为 JS 对象,无需手动转换~[4](alert 只能显示字符串,把对象传进去会自动调用对象的 toString() 方法,自然显示 [object Object])######谢谢啊!已经修改好了!把JSONObject json这个json传过去就可以了,然后alert(data.flag);就可以了######如果这样改//弹出对话框的内容为:undefined success:function(data) { alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出 },######

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

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

    如果这样改//弹出对话框的内容为:undefined
    success:function(data)         {

               alert(data.info);//弹出对话框的内容为:undefined,,,怎么改才可以弹出内容     

            },###### 加上这么一句话:

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

    ######alert(JSON.stringify(data))######已经是你要的格式了######直接反回map 去掉datetype

    2020-06-03 10:54:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像