【发布时间】:2011-11-15 18:19:23
【问题描述】:
我不知道如何检测 AJAX 代理生成的 HTTP 请求是插入/更新还是删除操作。
这些是我的数据(simpsons.json):
[
{
"id": 1,
"firstName": "Homer"
},
{
"id": 2,
"firstName": "Marge"
},
{
"id": 3,
"firstName": "Bart"
},
{
"id": 4,
"firstName": "Lisa"
}
]
这是我的 Sencha Touch 1.1 代码:
Character = Ext.regModel('Character', {
fields: [
{name: 'id', type: 'int'},
{name: 'firstName', type: 'string'}
]
});
SimpsonsStore = new Ext.data.Store({
model: 'Character',
proxy: {
type: 'rest',
url: 'simpsons.json'
},
autoLoad: true
});
SimpsonsStore.on('load', function(store, records, success) {
// add record
store.add({id: 5, firstName: 'Maggie'});
// update record
var margeRecord = store.findRecord('firstName', 'Marge');
margeRecord.set('firstName', 'Marjorie');
// delete record
var homerRecord = store.findRecord('firstName', 'Homer');
store.remove(homerRecord);
// sync store
store.sync();
});
运行此代码会生成这些 HTTP 请求:
POST /simpsons.json/5?_dc=1321377134028 HTTP/1.1
{"records":[{"id":5,"firstName":"Maggie"}]}
.
PUT /simpsons.json/2?_dc=1321377142625 HTTP/1.1
{"records":[{"id":2,"firstName":"Marjorie"}]}
.
DELETE /simpsons.json/1?_dc=1321377148457 HTTP/1.1
{"records":[{"id":1,"firstName":"Homer"}]}
喜欢它,每个操作都有自己的HTTP请求方法(动词)。
当我将代理类型从“rest”更改为“ajax”时,生成的 HTTP 请求如下所示:
POST /simpsons.json?_dc=1321376787918 HTTP/1.1
{"records":[{"id":5,"firstName":"Maggie"}]}
.
POST /simpsons.json?_dc=1321376792207 HTTP/1.1
{"records":[{"id":2,"firstName":"Marjorie"}]}
.
POST /simpsons.json?_dc=1321376798158 HTTP/1.1
{"records":[{"id":1,"firstName":"Homer"}]}
如您所见,这些看起来非常相似。这不是插入或更新操作的问题。但是后端如何检测到最后一个 HTTP 请求既不是插入也不是更新,而是删除操作?
我在 Sencha Touch 2.0 中找到了一个“api”配置选项,因为它存在于 Ext JS 4 中,但我没有找到一种方法来为 Sencha Touch 1.1 中的 AJAX 代理的特定操作定义不同的 URL 或参数。
任何帮助表示赞赏。
谢谢,
呜呜
【问题讨论】:
标签: ajax sencha-touch