ajax代理的URL-extjs
关于ajax代理的URL-extjs,extjs,Extjs,关于ajax代理的url字段和Ext.ajax.request 我从Ext.Ajax.request收到一个JSON响应,并将该数据发送到存储。(我还尝试使用pagingToolbar,这在目前是非常不合作的) 无论如何,当我使用ajax代理时,分页似乎只起到了很小的作用,但是我不确定要将什么作为URL。目前它是url:'' 似乎url从特定目录中的.json文件读取数据(即url:'myData/data.json'),但是没有任何类似的文件可以读取,因为我的响应将作为json对象返回 这是我
ajax
代理的url
字段和Ext.ajax.request
我从Ext.Ajax.request
收到一个JSON响应,并将该数据发送到存储
。(我还尝试使用pagingToolbar
,这在目前是非常不合作的)
无论如何,当我使用ajax
代理时,分页似乎只起到了很小的作用,但是我不确定要将什么作为URL。目前它是url:''
似乎url
从特定目录中的.json
文件读取数据(即url:'myData/data.json'
),但是没有任何类似的文件可以读取,因为我的响应
将作为json对象返回
这是我的请求/响应
,我将其解析并发送到我的存储
:
var request = Ext.Ajax.request({
url : 'MCApp', //here I specify the Servlet to be read from
jsonData : searchquery, //A JSON Object
params:{
start:0,
limit: itemsPerPage
},
success : function(response) {
mainresponse = response.responseText;
//etc.
}
单独请求是否多余?
我是否可以单独在我的存储中完成这项工作(将我的searchquery
作为参数传递给服务器以及其他所有功能)
我为这个混乱的问题提前道歉
干杯您可以使用内存代理并使用data属性设置存储数据,但我不建议这样做 如果我知道你在哪里,我会忘记ajax请求,开始利用商店的代理 这里有一个例子
var store = Ext.create('Ext.data.Store', {
storeId: 'resultsetstore',
autoLoad: false,
pageSize: 20,
fields: ['id','name','description'],
proxy: {
type: 'ajax',
url: 'urlToTheServlet', //here I specify the Servlet to be read from
extraParams: {
searchquery: 'Test'
}, //A String Object
reader: {
type: 'json',
root: 'elements'
}
}
});
store.load();
请注意,开始、限制在后台处理。您不必手动设置它们。您可以设置,但它有自己的默认值,因此它不是必需的
这是您的数据的预期外观:
{
"elements": [
{
"id": 1,
"name": "John",
"description": "Project Manager"
},
{
"id": 2,
"name": "Marie",
"description": "Developer"
},
{
"id": 3,
"name": "Tom",
"description": "Technical Lead"
}
]
}
更新:将对象作为有效负载传递给代理
我也有同样的问题,我无法找到现成的解决方案,所以我写了自己的代理来解决这个问题
Ext.define('BCS.data.proxy.AjaxWithPayload', {
extend: 'Ext.data.proxy.Ajax' ,
alias: 'proxy.ajaxwithpayload',
actionMethods: {
create: "POST",
destroy: "POST",
read: "POST",
update: "POST"
},
buildRequest: function(operation) {
var me = this,
request = me.callParent([operation]);
request.jsonData = me.jsonData;
return request;
}
});
现在您可以执行以下操作:
var store = Ext.create('Ext.data.Store', {
storeId: 'resultsetstore',
autoLoad: false,
pageSize: 20,
fields: ['id','name','description'],
proxy: {
type: 'ajaxwithpayload',
url: 'urlToTheServlet', //here I specify the Servlet to be read from
jsonData : YOUR_OBJECT
reader: {
type: 'json',
root: 'elements'
}
}
});
我更喜欢将每个方法保留在单独的端点中:
proxy: {
type: 'ajax',
reader: {
type: 'json'
},
api: {
read: 'getCenarioTreeNode', // To request a node children (expand a node)
create: 'createCenarioTreeNode', // When you insert a node
update: 'updateCenarioTreeNode', // When you change a node attribute
destroy: 'destroyCenarioTreeNode' // When you delete a node
},
writer: {
type:'json',
encode:true,
rootProperty:'data'
}
},
为什么不在代理中使用相同的“MCApp”URL?存储/代理组合应该能够处理ajax请求并为您填充存储。你可以使用商店中的过滤器和过滤器告诉你的服务器端代码如何具体处理请求。我已经尝试过了,但我似乎无法正确地传递我的searchquery。如果你能成功,我建议使用标准的过滤器和过滤器。如果您需要以某种方式向服务器端传递更多参数,您可以将
extraParams
添加到您的代理中。我将对此进行研究,感谢Christanks的明确回答,我犯了一个错误,但是,我的searchquery
是一个JSON对象。如果我能在extraParams
中找到如何传递这个参数,我希望能找到所有的方法。基本上我需要做的是extraParams:{jsondata:searchquery}
。有什么想法吗?使用extraParams,您只能发送字符串参数或字符串数组。它们在url中被编码为“get”参数。我更新了发送对象解决方案的答案。我们的自定义代理应该添加到框架中,非常感谢VDP!嘿,VDP,我有一个新问题,你可以在这里轻松回答
proxy: {
type: 'ajax',
reader: {
type: 'json'
},
api: {
read: 'getCenarioTreeNode', // To request a node children (expand a node)
create: 'createCenarioTreeNode', // When you insert a node
update: 'updateCenarioTreeNode', // When you change a node attribute
destroy: 'destroyCenarioTreeNode' // When you delete a node
},
writer: {
type:'json',
encode:true,
rootProperty:'data'
}
},