如果在开头放置一个alert(),为什么javascript函数刚刚执行?

时间:2011-04-20 08:46:58

标签: javascript json callback seam

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/

答案是这样的。祝大家好! ;)

2 个答案:

答案 0 :(得分:2)

一般建议:不要在有{​​{1}}的情况下混合使用块。以下表格更具可读性,您可以更快地查明问题。

{}

答案 1 :(得分:0)

  

似乎问题在于时间。如果我   放了100ms之间的延迟   JSON结果和实际回调,   一切都很完美。但是这个   不能正确......我很好   无能。

听起来像是在进行异步(ajax)通信。这是代码的其余部分,它要求服务器提供一些数据。您在服务器提供给您之前处理结果。这解释了延迟。