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-function。我在Firebug中检查了传输的JSON。一切都好。结果是应该是JSON字符串。
有趣的是,如果我在回调函数的开头用call()函数调用JSON响应,它实际上是。我是JavaScript的新手,可能会遗漏一些明显但我无法理解的东西。错误在哪里?
编辑:
似乎问题在于时间。如果我在JSON结果和实际回调之间设置了100ms的延迟,那么一切都很完美。但这可能不对......我有点无能为力。
(顺便说一句:通信是由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");
最后编辑:
好的,现在我得到了问题的确切来源。它不是Seam Remoting,而是dialogError()函数和它用来显示对话框的库。
dialogError()函数如下所示:
function dialogError(error){
TINY.box.show({html:error,width:250,height:100,close:true,mask:true,opacity:20,topsplit:3})
}
它使用一个名为TINYBOX的小对话库。现在,此库提供了各种参数来配置对话框。 'mask'参数引起了所有麻烦。它可以使对话框的背景变暗。如果打开它,TINYBOX需要一个启动延迟才能使用回调函数。 (我不明白为什么)
但对于那些喜欢谜语的人:
这就是图书馆。它非常小而清晰。不幸的是,我的JavaScript技能尚不够复杂,无法理解它。 http://www.scriptiny.com/2011/03/javascript-modal-windows/
答案是这样的。祝大家好! ;)
答案 0 :(得分:2)
一般建议:不要在有{{1}}的情况下混合使用块。以下表格更具可读性,您可以更快地查明问题。
{}
答案 1 :(得分:0)
似乎问题在于时间。如果我 放了100ms之间的延迟 JSON结果和实际回调, 一切都很完美。但是这个 不能正确......我很好 无能。
听起来像是在进行异步(ajax)通信。这是代码的其余部分,它要求服务器提供一些数据。您在服务器提供给您之前处理结果。这解释了延迟。