JSON 字符串不能通过 jquery ajax 作为纯字符串发布?



我想将一个 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方法并没有被调用。太奇怪了。

您尚未使用 JSON.stringify() 在客户端序列化通过 ajax.serialize it 发送的数据,并且发送的数据将转换为单个字符串。

将代码修改为:

$.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();
            }
        })

这可能会起作用。

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

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

PS:查看Firebug中的网络选项卡或检查元素,具体取决于您的浏览器:

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

pks2[0][userName2]:'hehe'

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

相关内容

  • 没有找到相关文章

最新更新