json字符串不能通过jquery ajax发布为普通字符串?

时间:2012-05-31 06:55:34

标签: java gson webwork

我想将一个json字符串作为纯字符串发布到一个动作,然后使用gson将该字符串转换为List,但该字符串仍然被jquery / webwork视为json对象,我正在使用jquery 1.43 + webwork + gson ,没有jquery json插件或其他东西。

这是行动:

public class ImageAction extends BaseAction {

    private String pks;

    public void setPks(String pks) {
        this.pks = pks;
        Gson gson=new Gson();
        List<Map> list=gson.fromJson(pks,new TypeToken<List<Map<String,String>>>(){}.getType());
        System.out.println(list.size());
    }

    ......
}

jquery代码:

j$.ajax({
            url:approveUrl,
            data: {pks:'[{"userName":"theoffspring"}]'},
//            dataType:'json',
            type:'post',
//            traditional: true,
            success:function (response) {
                hideProgressBar(parent.document)
                if (response.result==false){
                    alert(response.msg);
                    return;
                }

//                document.location.reload();
            }

        })

我希望将pks作为常用字符串而不是json对象发布。但是当我调用jquery代码时,setPks方法不会被调用。太奇怪了。

2 个答案:

答案 0 :(得分:0)

看看这个:http://jsfiddle.net/flocsy/vuGL9/

你会看到你的pks实际上是按照你想要的字符串发送的,当它不作为字符串发送时(pks2)它看起来会有所不同。

PS:查看firebug或inspect元素中的网络标签,具体取决于您的浏览器:

pks: '[{"userName":"theoffspring"}]'

pks2[0][userName2]:'hehe'

所以可能你的服务器端做了一些魔法......

答案 1 :(得分:0)

您没有通过ajax序列化您发送的数据。使用JSON.stringify()在客户端对其进行序列化,并将其转换为单个字符串。

将您的代码修改为:

$.ajax({
            url:approveUrl,
            data:JSON.stringify(yourdata),
//            dataType:'json',
            type:'post',
//            traditional: true,
            success:function (response) {
                hideProgressBar(parent.document)
                if (response.result==false){
                    alert(response.msg);
                    return;
                }

//                document.location.reload();
            }

        })

这可能有用。