0

在 sencha 中,AJAX 总是成功的,但在 grails 中,每当我尝试恢复他时都会失败。它应该恢复def data = params.data,并且def data = params没有工作。

sencha 中的控制器(保存时)

onSave: function(button, e, eOpts) {
    var name = Ext.getCmp('name').getValue();
    var description = Ext.getCmp('description').getValue();
    var data = {};
    data.name = name;
    data.description = description;

    Ext.Ajax.request({
    type: 'POST',
    contentType:'application/json',
    dataType: 'jsonp',
    data: data,
    crossDomain: true,
    url: 'http://localhost:8080/TryIt/product/newProduct',
    success: function(response, opts) {
    console.log('server-side success with status code ' + response.status);
    },
    failure: function(response, opts) {
    console.log('server-side failure with status code ' + response.status);
    },
    error: function(msg){
    alert(msg);
    }
});

grails中的控制器

    def newProduct() {
    def data = JSON.parse(data)
    def newP = new Product(name: data.name, description: data.description)
    if (newP) {
            newP = newP.save(flush: true)
            println "saved!"
            println data.name
            println data.description
        } else {
        println "error"
        }
        return result as JSON
    }

问题是,如何恢复交给 grails 的数据?哦,是的,js 和 jquery 就像彩虹和蝴蝶一样(效果很好)。

4

3 回答 3

1

如果您的请求确实是跨域的,您将无法使用Ext.Ajax,您将不得不使用Ext.data.JsonP。但显然不是,否则您根本不会在服务器端看到它。

无论如何,既不Ext.Ajax#request也不Ext.data.JsonP#request接受一个data选项。所以你的请求可能会离开,但它是空的。在浏览器的开发者工具的网络面板中检查它。

然后,如果您坚持使用Ext.Ajax,请使用jsonData参数而不是data,或者使用JsonP,使用params

于 2013-07-25T01:28:40.650 回答
1

我修复了在我的 Ajax 中使用data = JSON.stringify(data);和更改datato的问题。params

于 2013-07-28T18:02:46.617 回答
0

您可以使用以下方法提取 json 数据:

def jsonObject = request.JSON

编辑:我应该补充一点,它已经被解析成 aJSONObject所以你不需要打电话JSON.parse()

于 2013-07-25T15:34:30.310 回答