Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在开头放了一个alert(),为什么要执行javascript函数?_Javascript_Json_Callback_Seam - Fatal编程技术网

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

如果在开头放了一个alert(),为什么要执行javascript函数?,javascript,json,callback,seam,Javascript,Json,Callback,Seam,当执行此回调函数时,调用“dosomething”部分不会出现问题。但是在json.error为true的情况下,不会执行dialogError函数。我已经检查了Firebug中传输的JSON。一切都好。结果是一个JSON字符串 有趣的是,如果我在回调函数的开头使用alert()函数调用JSON响应,它实际上是执行的。我是JavaScript新手,可能遗漏了一些显而易见的东西,但我就是想不出来。臭虫在哪里 编辑: 看来问题在于时间。如果我在JSON结果和实际回调之间加上100毫秒的延迟,一切都

当执行此回调函数时,调用“dosomething”部分不会出现问题。但是在json.errortrue的情况下,不会执行dialogError函数。我已经检查了Firebug中传输的JSON。一切都好。结果是一个JSON字符串

有趣的是,如果我在回调函数的开头使用alert()函数调用JSON响应,它实际上是执行的。我是JavaScript新手,可能遗漏了一些显而易见的东西,但我就是想不出来。臭虫在哪里


编辑:

看来问题在于时间。如果我在JSON结果和实际回调之间加上100毫秒的延迟,一切都会正常工作。但这不可能是对的。。。我有点不知所措

(哦,顺便说一下:通信是由JBossSeamRemoting完成的)

整个函数如下所示:

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
                    }
                }
         };
var manager = Seam.Component.getInstance("solverTreeStructure");
Seam框架通过以下功能提供manager对象:

        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远程处理,而是dialogError()函数及其用于显示对话框的库

dialogError()函数如下所示:

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
                    }
                }
         };
var manager = Seam.Component.getInstance("solverTreeStructure");
它使用一个名为TINYBOX的小对话框库。现在,该库提供了各种参数来配置对话框。“mask”参数引起了所有的麻烦。它负责使对话框的背景变暗。如果打开,TINYBOX需要启动延迟才能使用回调函数。(我不知道为什么)

但对于那些喜欢谜语的人:

那是图书馆。它又小又清晰。不幸的是,我的JavaScript技能还不足以理解它。


这就是答案。祝大家今天愉快!;)

只是一个一般性的建议:不要将块与
{}
混合使用。以下表格更具可读性,您可以更快地找出问题

function dialogError(error){
        TINY.box.show({html:error,width:250,height:100,close:true,mask:true,opacity:20,topsplit:3})
    }
看来问题在于时间。如果我 在两个端口之间设置100毫秒的延迟 JSON结果和实际回调, 一切都很完美。但是这个 不可能是对的。。。我有点 毫无头绪


听起来像是在进行异步(ajax)通信。其中是向服务器请求某些数据的其余代码。您需要在服务器将结果提供给您之前处理它。这就解释了延迟的原因。

为什么要使用
eval()
而不是
JSON.parse()
?嗯……可能是因为这是我找到的第一个解决方案。我将eval()部分更改为JSON.parse(result),但问题仍然存在:(警报)我肯定对响应做了一些修改,所以它的识别方式有所不同。但是什么?你是如何/何时调用你的回调函数的?@RoToRa:我在问题中添加了完整的函数……啊,对不起,我对Seam不熟悉。我的一般猜测是:回调函数调用得太早了——可能不是作为回调函数,这很简单为什么警报会延迟。我不能说这是怎么发生的。谢谢你的建议…这样肯定更好:)但问题仍然存在:(@Jonny我添加了一些
控制台.log
行。它们在现代浏览器中工作,比警报更好()。也许这会有助于识别出哪里出了问题。好吧,现在我发现它与alert()一起工作的原因不是alert,而是在我能够关闭对话框之前经过的时间。我尝试设置了一个“setTimeout”在JSON repsonse和回调函数调用之间。结果:100毫秒就足够了,它起作用了。现在的问题是。为什么??(@vbence:谢谢你的建议。我以后会试试…)@Jonny secrtet可能在于如何设置事件处理程序。是的,它是异步的。但这是seam框架在后台处理的事情。在文档中,它说回调函数是在服务器方法完成工作后立即调用的。所以通常这不应该是个问题。但我当然不知道它确实在后台工作……但是知道javascript本身没有问题是有帮助的:)谢谢!