未捕获的Ext.Error:您正尝试解码无效的JSON字符串:使用Ext JS和Spring MVC提交表单 [英] Uncaught Ext.Error: You're trying to decode an invalid JSON String: Form Submission using Ext JS and Spring MVC

查看:127
本文介绍了未捕获的Ext.Error:您正尝试解码无效的JSON字符串:使用Ext JS和Spring MVC提交表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

提交我的Ext JS表单后出现以下错误:

I am getting the following error after submitting my Ext JS form:

未捕获的Ext.Error:您正在尝试解码无效的JSON字符串

Uncaught Ext.Error: You're trying to decode an invalid JSON String

JS:

Ext.onReady(function() {

        var simple = Ext.create('Ext.form.Panel', {

                    frame : true,
                    title : 'Login Form',
                    bodyStyle : 'padding:5px 5px 0',
                    width : 350,
                    fieldDefaults : {
                        msgTarget : 'side',
                        labelWidth : 75
                    },
                    defaultType : 'textfield',
                    defaults : {
                        anchor : '100%'
                    },

                    items : [{
                                fieldLabel : 'User Name',
                                name : 'userName',
                                allowBlank : false,
                                emptyText : 'UserName'
                            }, {
                                fieldLabel : 'Password',
                                name : 'password',
                                allowBlank : false,
                                inputType : 'password',
                                emptyText : 'Password'
                            }],

                    buttons : [{
                        text : 'Save',
                        handler : function() {
                            var form = this.up('form').getForm();
                            form.submit({
                                        url : saveFormUrl
                                    //  waitMsg : 'Sending the info...',
                                    //  success : function(fp, o) {
                                    //      Ext.Msg.alert('Success',
                                    //              'Form submitted.');
                                    //  }
                                    });
                        }
                    }, {
                        text : 'Cancel'
                    }]
                });
        simple.render(document.body);
        simple.getEl().center();
    });

控制器类:

@Controller
public class UserController {

private static final Logger logger = LoggerFactory
        .getLogger(TController.class);

private TService tService = null;

@Autowired
public void setTService(TService tService) {
    this.tService = tService;
}

@RequestMapping(value = "/index.html", method = RequestMethod.GET)
public String home() {
    System.out.println("Welcome home!");
    return "login";
}

@RequestMapping(value = "/save-form.html", method = RequestMethod.POST)
public ModelAndView submitData(User user){
    System.out.println("User name:"+user.getUserName());
    ModelAndView mv = new ModelAndView("htmlLinks");
    return mv;
}

save-form.html:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<html>
<head>
<title>POC</title>

</head>
<body>
 Welcome User !!
</body>
</html>

我做错了什么?解决办法是什么?我正在使用Ext JS 4和Spring MVC.

What am I doing wrong? What is the solution? I am using Ext JS 4 and Spring MVC.

推荐答案

根据文档,看起来要求响应是JSON或XML,格式如下:

According to the documentation for form.submit, it looks like the response is required to be either JSON or XML, formatted like so:

{
    success: true,
    data: {
        url: "http://somewhere",
        someData: "whatever you want"
    }
}

在JavaScript的成功处理程序中,您可以引用o.data.[variable]以获得自定义数据.

In your JavaScript's success handler, you can reference o.data.[variable] to get custom data.

不幸的是,您将需要更改submitData method(在您的控制器中)以上面定义的结构返回JSON响应对象.在响应对象中,可以包括指向save-form.html的URL.然后,您可以在成功处理程序中为其发出另一个GET请求.

Unfortunately, you will need to change the submitData method (in your controller) to return a JSON response object in the structure defined above. In the response object, you can include a URL to save-form.html. Then you can make an additional GET request for it in the success handler.

我不知道这是否行得通,因为我没有使用Ext JS的经验,但是我会设想成功处理程序看起来像这样:

I don't know if this will work because I have no experience with Ext JS, but I would envision the success handler to look something like this:

success: function(fp, o) {
    Ext.Msg.alert('Success', 'Form submitted.');
    Ext.Ajax.request({
        url: o.data.url,
        method: "GET",
        success: function(response, request) {
            // do whatever you need to with the generated HTML
            alert(response.responseText);
        },
        failure: function(response, request) {
            alert('failed');
        }
    });
}

这篇关于未捕获的Ext.Error:您正尝试解码无效的JSON字符串:使用Ext JS和Spring MVC提交表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆