Я использую древовидную панель и пользовательский загрузчик дерева и вызываю запрос ajax, когда нажимаю на узел.Он отлично работает как в IE, так и в FF.
Но сегодня мы обнаружили, что если у узла есть только один дочерний элемент (возвращать только одну базу записей по идентификатору родительского узла), то IE не показывает дочерний узел.То же самое происходит и в Combo store, если сервис возвращает только один reocrd.
Очень интересно то, что я пытаюсь отладить с помощью Fildder.поэтому я должен поставить "."точка в моем URL "http://localhost{.}:1234/, тогда он отлично работает как для дерева, так и для комбо.
Вот возвращаемый формат JSON из FF и FireBug. Код:
{"result":[{"href":"..\/EMP\/EmployeeSearch.aspx","iconCls":"","id":"8c362443-7bb3-427e-910c-87b391c6abf5","leaf":true,"text":"Employees"}]}
Вот поврежденная JSON-строка для повторного запуска из IE с помощью инструмента разработчика. Код:
{"result":[{"href":"..\/EMP\/E"
My Override TreeLoader
Ext.override(Ext.tree.TreeLoader, {
requestData: function (node, callback) {
if (this.fireEvent("beforeload", this, node, callback) !== false) {
this.transId =
Ext.Ajax.request({
method: this.requestMethod,
url: this.dataUrl || this.url,
success: this.handleResponse,
failure: this.handleFailure,
scope: this,
argument: { callback: callback, node: node },
params: Ext.encode(this.getParams(node)),
//jsonData: { node: node },
headers: this.header || { 'Content-Type': 'application/json;charset=utf-8' }
});
} else {
// if the load is cancelled, make sure we notify
// the node that we are done
if (typeof callback == "function") {
callback();
}
}
}
, processResponse: function (response, node, callback) {
var json = response.responseText;
/*added to remove result wrapper from JSON*/
try {
var obj = Ext.decode(json);
var o = obj.result;
node.beginUpdate();
for (var i = 0, len = o.length; i < len; i++) {
var n = this.createNode(o[i]);
if (n) {
node.appendChild(n);
}
}
node.endUpdate();
if (typeof callback == "function") {
callback(this, node);
}
} catch (e) {
this.handleFailure(response);
}
}
});