我在extjs 4中从服务器响应中获取response.responseText
时遇到一个问题。
以下是加载商店的代码:
store.load({
params: {
'projectid': this.projectid
},
callback: function (records, operation, success, response) {
console.log(records);
console.log(response.responseText);
}
});
实际上,当我使用以下功能发出请求时,我正确地获得了reponse.responseText
。
Ext.Ajax.request({
url: 'login/GetLoginCheck.action',
method: 'GET',
params: {
'username': values['username'],
'password': values['password']
},
scope: this,
success: function(response) {
Ext.Msg.alert(response.responseText);
var redirect = response.responseText;
window.location.href = "" + redirect + ".jsp";
},
failure: function(response) {
Ext.Msg.alert('INVALID USERNAME OR PASSWORD');
}
});
所以请建议我如何从具有回调函数的store.load()中获取response.responseText
。
答案 0 :(得分:8)
回调有3个参数...... 试试这个:
store.load({
params: {
'projectid': this.projectid
},
callback: function (records, operation, success) {
console.log(operation.response.responseText);
}
});
答案 1 :(得分:1)
我使用Model.load(...)
遇到了类似的问题,但就我而言,operation.response
未定义。所以,我找到了另一种方法:
Model.load(1, {
success: function () {
// I haven't tested inside this callback yet
},
failure: function (record, operation) {
var response = operation.request.proxy.reader.rawData;
alert(response.message);
}
});
答案 2 :(得分:1)
您也可以尝试这个..
Ext.create('Ext.data.Store',{
fields[],
proxy:{url:'store_url.json', reader:{type:'json',root:'data'}},
autoLoad:true,
listeners:{
load:function(store, record, success, opts){
var response_text = store.proxy.reader.rawData;
console.log(response_text);
}
}
})
答案 3 :(得分:0)
在extjs 3.4中你可以使用它:
this.historyInvoiceHeaderGrid.store.load({
params:{start:0, limit:20},
callback: function (records, operation, success) {
console.log(this.reader.jsonData);
}});
此属性store.reader.jsonData
将返回完整回复。
也许对于某人来说,它会在extjs 3中有用。
答案 4 :(得分:0)
在Extjs 4.x中它的工作方式如下
myStore.load({
url: 'myurl',
method: 'GET',
callback: function(records, operation, success) {
var jsonStr = Ext.JSON.decode(operation.response.responseText);
alert(jsonStr.message);
}
});
在Extjs 5中你必须这样做
myStore.load({
url: 'myurl',
method: 'GET',
callback: function(records, operation, success) {
var message=forecastMethodStore.getProxy().getReader().rawData.message;
}
});
但这里的关键点是你应该在java方面的JSON响应中设置消息。
示例:{" Root":[],"消息":"重复"}"
希望这会对某人有所帮助。
答案 5 :(得分:0)
您必须在messageProperty
中的proxy reader
中设置'Ext.data.Store'
。
reader: {
type: 'json',
root: 'myDataList',
totalProperty: 'myTotalRecord',
successProperty: 'mySuccess',
messageProperty : 'myMsg'
}
mySuccess
返回false
后调用callback: function
。
store.load({
params: {start: 0, limit: 15},
callback: function (records, operation, success) {
if (!success) {
try {
Ext.Msg.alert('Sorry !', operation.getError());
// operation.getError() returns myMsg value
}catch (e){
Ext.Msg.alert('Exception !', e);
}
}
}
});
这是Java Servlet的json返回。
Map<String, Object> myDataMap = new HashMap<>(3);
try {
// Something
myDataMap.put("mySuccess", true);
myDataMap.put("myMsg", "Whats up khomeni !");
} catch (Exception e) {
myDataMap.put("mySuccess", false);
myDataMap.put("myMsg", "Whats wrong with me.");
}
String json = new Gson().toJson(myDataMap);