Javascript 在EXT.js 4.2.1中,如何指定代理发送的表单数据不是JSON格式?

Javascript 在EXT.js 4.2.1中,如何指定代理发送的表单数据不是JSON格式?,javascript,ajax,forms,extjs,http-post,Javascript,Ajax,Forms,Extjs,Http Post,这是我的代码: Ext.define('masterLists.siteModel', { extend: 'Ext.data.Model', xtype: 'siteModel', fields: [ {name: 'id', type: 'string'}, {name: 'siteId', type: 'string'}, {name: 'nameCenterEnglish', type: 'string'},

这是我的代码:

Ext.define('masterLists.siteModel', {
    extend: 'Ext.data.Model',
    xtype: 'siteModel',
    fields: [
        {name: 'id', type: 'string'},
        {name: 'siteId', type: 'string'},
        {name: 'nameCenterEnglish',  type: 'string'},
         ...
    ],
    proxy: {
        type: 'ajax',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        api: {
            // Called when saving new records
            create: '/ACP/ADS?CMD=addSite',
            // Called when reading existing records
            read: '/ACP/ADS?CMD=loadSite',
            // Called when updating existing records
            update: '/ACP/ADS?CMD=updateSite',
            // Called when deleting existing records
            destroy: '/ACP/ADS?CMD=deleteSite'
        },
        reader: {
            type: 'json',
            root: 'data'
        }
    }
});
现在的问题是,当我像这样破坏记录模型时:
record.destroy()

这是我在开发工具中看到的:

如上图所示,表单数据以JSON格式编码。我希望它是在URL编码的键/值对列表中,就像任何正常形式的数据在提交时都会被发送一样

如何在Ext Js中实现这一点??
提前谢谢大家

您可以覆盖代理的buildUrl方法:

Ext.define('masterLists.siteModel', {
    extend: 'Ext.data.Model',
    xtype: 'siteModel',
    fields: [{
        name: 'id',
        type: 'string'
    }, {
        name: 'siteId',
        type: 'string'
    }, {
        name: 'nameCenterEnglish',
        type: 'string'
    }],
    proxy: {
        type: 'ajax',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        api: {
            // Called when saving new records
            create: '/ACP/ADS?CMD=addSite',
            // Called when reading existing records
            read: '/ACP/ADS?CMD=loadSite',
            // Called when updating existing records
            update: '/ACP/ADS?CMD=updateSite',
            // Called when deleting existing records
            destroy: '/ACP/ADS?CMD=deleteSite'
        },
        reader: {
            type: 'json',
            root: 'data'
        },
        // To change all the REST methods to GET
        actionMethods: {
            create: 'GET',
            read: 'GET',
            update: 'GET',
            destroy: 'GET'
        },
        // To build custom URL
        buildUrl: function(request) {
            var recordData = request.operation.records[0].getData();
            var encodedUrlData = Ext.Object.toQueryString(recordData);
            return this.api[request.action] + '&' + encodedUrlData;
        } 
    }
});

这是一个很好的简单解决方案。我想找到一种通过POST发送的方法,但这对我来说确实有效。POST/GET方法是在“actionMethods”配置道具中定义的。是的,但是你不能像GET中那样在POST中附加url,所以这个方法只对GET有效,对吗?为什么不?POST请求可以在路径中发送一些参数。例如,RESTURI可以使用路径参数将资源作为目标。而不是你可以写