Да, есть, но нет, вы не должны использовать его.
В вашем случае, в ExtJS до ExtJS 6, вы можете легко прочитать весь необработанный ответ от getStore().getProxy().getReader().rawData
, если вы не установили keepRawData:false
в определении читателя. Это поставляется с большим , но.
В 6.0 необработанные данные отбрасываются очень рано, если вы не используете keepRawData
на считывателе. Причина, цитата из документов: Обратите внимание, что, начиная с Ext JS 6.0, поведение по умолчанию было изменено, чтобы не сохранять необработанные данные из-за высокого потенциала утечки памяти.
Из-за этого, я добавил переопределение на моем считывателю ExtJS 6.0.1:
Ext.define("MyApp.override.JsonReader", {
override:"Ext.data.reader.Json",
/**
* Make additional processing available on the raw response.
*/
processRawResponse:null,
getResponseData:function(response) {
if(this.processRawResponse) this.processRawResponse(response);
me.callParent(arguments);
}
});
Так что теперь я могу добавить на каждом читателе функцию processRawResponse по мере необходимости, как этот:
proxy: {
type: 'ajax',
groupParam: false,
startParam:false,
limitParam:false,
pageParam:false,
sortParam:false,
url: '../api/AdminPanel/ACLRules',
headers: {
Accept: 'application/json'
},
reader: {
type: 'json',
rootProperty: 'data',
processRawResponse:function(response) {
var responseText = Ext.decode(response.responseText, true);
if(responseText && responseText.message) {
Ext.Msg.alert('ERROR',responseText.message);
}
Вы можете попробовать, работает ли это в ExtJS 4; from the source code, it seems so. В противном случае должны потребоваться только незначительные изменения.
Если ваши сообщения об ошибках поступают в одно и то же свойство каждый раз и каждый раз им нужна одинаковая обработка, вы также можете обрабатывать их по всему миру, непосредственно из переопределения, например. если вы получаете массив информации отладки:
getResponseData:function(response) {
if(this.processRawResponse) this.processRawResponse(response);
var debugList = Ext.getCmp("debugList"),
shorten = function(tex) {
return tex.substring(0,500).replace(/(\r\n|\r|\n)/g,"<br>");
},
returned = "";
try {
returned = response.responseText;
var decodedData = Ext.decode(returned);
if(decodedData.Debug) this.rawDebugData = decodedData.Debug;
return decodedData;
} catch (ex) {
var caption = "Decoding error",
message = "The server has returned malformed JSON.",
box = Ext.create('Ext.window.MessageBox',{});
try {
var jsonStart = Math.min(returned.indexOf('['), returned.indexOf('{'));
if(jsonStart>0) {
message = (message + "\n" + returned.substring(0,jsonStart));
returned = returned.substring(jsonStart);
}
else {
message = (message + "\n" + returned);
}
} catch (e) {
}
if(!debugList) box.alert(caption,shorten(message));
if(debugList) debugList.setValue(debugList.getValue()+caption+': '+message+'\n');
return Ext.decode(returned, true) || {};
}
},
Предоставьте свой код, который возвращает результаты (код или API, вызываемый Proxy.) Вам необходимо обработать это в ответ на этот API. \t Строка storeLoader общественности (/ * Титулы * /) { \t \t если (успешно) { \t \t \t "{успех: истинно}" \t \t} еще { \t \t \t «{успех: ложь, сообщение : «Что-то пошло не так»} « \t \t} \t} – Harshal