var callback = function(result){
//alert(result);
var json = eval('('+result+')');
if(json.criticalerror==true) dialogCriticalError(json.errormessage);
else{
if(json.error==true) dialogError(json.errormessage);
else{
// Do something else
}
}
};
Когда эта функция обратного вызова выполняется, часть " Делать что-то еще " вызывается без проблем. Но в случае json.error равно true функция dialogError не выполняется. Я проверил переданный JSON в Firebug. Все отлично. В результате получается строка JSON, как и должно быть.
Интересно то, что на самом деле выполняется , если я вызываю JSON-ответ с функцией alert () в начале функции обратного вызова. Я новичок в JavaScript и, возможно, упускаю что-то очевидное, но я просто не могу понять это. Где ошибка?
РЕДАКТИРОВАТЬ:
Кажется, проблема во времени. Если я поместил задержку в 100 мс между JSON-результатом и реальным обратным вызовом, все работает отлично. Но это не может быть правдой ... Я немного невежественен.
(Да, кстати: связь осуществляется с помощью JBoss Seam Remoting)
Вся функция выглядит так:
function nextNode() {
var callback = function(result){
var json = JSON.parse(result);
if (json.criticalerror==true) {
dialogCriticalError(json.errormessage);
}else if (json.error==true) {
dialogError(json.errormessage);
}else {
document.getElementById('currentTree').innerHTML = json.state;
document.getElementById('countTrees').innerHTML = json.amountSteps;
document.getElementById('iframe').contentWindow.importGraph(json.tree);
document.getElementById('relevantnode').innerHTML = json.node;
createNodeBar(json);
}
};
manager.nextNode(callback);
}
Объект менеджера предоставляется Seam Framework с помощью следующей функции:
var manager = Seam.Component.getInstance("solverTreeStructure");
ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ:
Хорошо, теперь у меня есть определенный источник проблемы. Это не удаленное соединение, а функция dialogError () и библиотека, которую он использует для отображения диалогового окна.
Функция dialogError () выглядит так:
function dialogError(error){
TINY.box.show({html:error,width:250,height:100,close:true,mask:true,opacity:20,topsplit:3})
}
Он использует небольшую диалоговую библиотеку под названием TINYBOX. Теперь эта библиотека предлагает множество параметров для настройки диалоговых окон. Параметр «маска» вызвал все проблемы. Это отвечает за затемнение фона диалогового окна. Если он включен, TINYBOX необходима задержка запуска для работы с функцией обратного вызова. (я понятия не имею, почему)
Но для тех, кто любит загадки:
Вот и библиотека. Это очень маленький и чистый. К сожалению, мои навыки JavaScript еще недостаточно развиты, чтобы понять это.
http://www.scriptiny.com/2011/03/javascript-modal-windows/
Вот и ответ. Хорошего дня, ребята! ;)