【问题标题】:JQuery unable to post data to SPRING MVC controllerJQuery 无法将数据发布到 SPRING MVC 控制器
【发布时间】:2015-02-20 06:10:22
【问题描述】:

我正在使用 JQuery 块将数据发布到 Spring 控制器,这是 JQuery 代码

 $('.usr').click(function () {
        var user = $(this).text();

        $.post("three.htm", {
            user: user
        },function(data){
            console.log(JSON.stringify(data));
            //window.location.replace('five.htm');
            var form = $('<form action="five.htm" method="post">' +
            '<input type="hidden" name="usrData" id="usrData" value="' + JSON.stringify(data) + '" />' +
            '</form>');
            $('body').append(form);
            $("form").submit();
        }); 

 });

spring 控制器需要表单中的数据,代码如下:

@RequestMapping(value="/home/five.htm")
public ModelAndView five(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    Map<String, String> model = new HashMap<String, String>();
    String abc = request.getParameter("usrData");       
    return new ModelAndView("five",model);
}

“abc”的值仅作为“{”找到,而我需要的是通过 JQuery 打印到控制台的 JSON 数据的字符串化版本。

【问题讨论】:

  • 您是否尝试在浏览器调试工具的“网络”选项卡中检查请求有效负载中的内容?也许你可以在那里找到答案。
  • @Pramod 我在 JQuery 级别设置的值有问题。发送到控制器的请求不包含属性值。这就是问题所在。现在修好了。请检查 Arun 的答案。

标签: javascript jquery spring spring-mvc post


【解决方案1】:

问题是字符串化的json数据中"的转义。

$('.usr').click(function () {
    var user = $(this).text();

    $.post("three.htm", {
        user: user
    }, function (data) {
        console.log(JSON.stringify(data));
        //window.location.replace('five.htm');
        var $form = $('<form action="five.htm" method="post" />');
        $('<input/>', {
            type: 'hidden',
            name: 'usrData',
            value: JSON.stringify(data)
        }).appendTo($form)
        $('body').append($form);
        $form.submit();
    });

});

例如,如果您的数据是{test:3},那么您正在构造的字符串将是&lt;form action="five.htm" method="post"&gt;&lt;input type="hidden" name="usrData" id="usrData" value="{"test":3}" /&gt;&lt;/form&gt;,现在如果您查看value 属性可以看到值o 的" 提前终止.


但真的,你需要这样的表单提交,为什么不使用简单的 ajax 发布请求?

【讨论】:

  • 我正在尝试将其重定向到另一个页面。因此,使用 AJAX 不会帮助我更改浏览器中的视图页面。
  • 不过我需要一点帮助.. 将获得的这个值设置为模型并将该模型作为参数传递给 ModelAndView。在视图页面上,我需要 javascript 来读取模型中设置的值并执行一些操作。请问有这方面的帮助吗?
【解决方案2】:

我想这就是问题所在尝试删除value 中的双引号,然后提交表单。

'<input type="hidden" name="usrData" id="usrData" value=' + JSON.stringify(data) + ' />' +

并提交:

form.submit();

最终代码会是这样的。

     $('.usr').click(function() {
       var user = $(this).text();

       $.post("three.htm", {
         user: user
       }, function(data) {
         console.log(JSON.stringify(data));
         //window.location.replace('five.htm');
         var form = $('<form action="five.htm" method="post">' +
           '<input type="hidden" name="usrData" id="usrData" value=' + JSON.stringify(data) + 
           ' />' +
           '</form>');
         $('body').append(form);
         form.submit();
       });

     });

【讨论】:

  • 谢谢杰!我发现 Arun 的答案很适合我。
【解决方案3】:

使用下面的代码问题是json.stringfy返回结果字符串的双引号

$('.usr').click(function () { var user = $(this).text();

    $.post("three.htm", {
        user: user
    },function(data){
        console.log(JSON.stringify(data));
        //window.location.replace('five.htm');
        var form = $('<form action="five.htm" method="post">' +
        '<input type="hidden" name="usrData" id="usrData" value=' + JSON.stringify(data) + ' />' +
        '</form>');
        $('body').append(form);
        $("form").submit();
    }); 

});

【讨论】:

  • 谢谢维韦克!我发现 Arun 的答案很适合我。
【解决方案4】:

我建议将 encodeURIComponent 与 JSON.stringify() 一起使用,使用下面的代码 sn-p 将 json 设置为输入隐藏字段,否则在表单仅提交“{”时检查 http 标头。

例子:

encodeURIComponent(JSON.stringify(data))

服务器端您可以使用一些实用程序代码进行解码以供参考,我在下面给出了 URL 以寻求帮助:

store return json value in input hidden field

解决问题的完整代码:

$(document).ready(function (e) {

    $('.usr').click(function () {
        var user = $(this).text();


        var dgdfg = {
            fname: "chetan",
            lname: "pandya"
        };
        console.log("dgdfg : ");
        console.log(JSON.stringify(dgdfg));
        //window.location.replace('five.htm');
        var form = $('<form action="five.htm" method="post">' +
            '<input type="hidden" name="usrData" id="usrData" value="' + encodeURIComponent(JSON.stringify(dgdfg)) + '" />' +
            '</form>');
        //   $('usrData').attr('value', dgdfg);
        $('body').append(form);
        $("form").submit();


    });

});

【讨论】:

  • 您建议的 encodeURIComponent() 与从 JQuery 发送的数据混淆。
  • 我明白你的意思..谢谢!将您的答案与 Arun 的答案结合起来,它正在发挥作用。
猜你喜欢
  • 2013-10-25
  • 1970-01-01
  • 2013-01-11
  • 2017-12-09
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多