当前位置: 首页 > 知识库问答 >
问题:

Javascript WebSocket传递代码到评估

郭琦
2023-03-14

我有一个javascript对象,我通过一个web套接字作为原始文本传递给客户端。这个原始文本(目前)在收到时直接传递到一个评估语句中。问题是,由于某种原因,Javascript在将数据传递给事件处理程序之前一直在操作数据。我不知所措。

通过websocket传递的对象是:

var obj = {
    evaluate:function(str) {
        digit = parseInt(str,10);
        if(isNaN(digit)) {
            log.write("Invalid input: "+str);
        } else {
            log.write(this.spigot(digit));
        }
    },
    spigot:function(digit) {
        len = Math.floor(10*digit/3)+1;
        A = new Array(len);

        for(var i=0;i<len;i++) A[i]=2;
        var finalDigit = 0;
        var nines = 0;
        var predigit = 0;

        for(i=1;i<digit+1;i++) {
            q = 0;
            for(j=len;j>0;j--) {
                x = 10*A[j-1] + q*j;
                x = Math.floor(x)
                A[j-1] = x % ((2*j)-1);
                A[j-1] = Math.floor(A[j-1]);
                q = x / ((2*j) -1);
                q = Math.floor(q);
            }

            A[0] = Math.floor(q%10);
            q = Math.floor(q/10);

            if(q==9) {
                nines++;
            } else if (q==10) {
                finalDigit = predigit+1;
                for(j=0;j<nines;j++) {
                    finalDigit = 0;
                }
                predigit=0;
                nines=0;
            } else {
                finalDigit = predigit;
                predigit=q;
                for(j=0;j<nines;j++) {
                    finalDigit = 9;
                }
                nines=0;
            }
        }
        return finalDigit;
    }
}

客户端收到完整的消息(我使用Chrome的开发者工具和Firebug进行了检查)。但是,当我在以下事件处理程序中获得消息时:

function socketMessage(e) {
    log.write(e.data); //a log function I have written
}

e.data包含:

obj = {
    evaluate:function(str) {
        digit = parseInt(str,10);
        if(isNaN(digit)) {
            log.write('Invalid input: '+str);
        } else {
            log.write(this.spigot(digit));
        }
    },
    spigot:function(digit) {
        len = Math.floor(10*digit/3)+1;
        A = new Array(len);

        for(var i=0;i<len;i++) A[i]=2;
        var finalDigit = 0;
        var nines = 0;
        var predigit = 0;

        for(i=1;i<digit+1;i++) {
            q = 0;
            for(j=len;j>0;j--) {
                x = 10*A[j-1] + q*j;
                x = Math.floor(x)
                A[j-1] = x %((MISSING)(2*j)-1);
                A[j-1] = Math.floor(A[j-1]);
                q = x / ((2*j) -1);
                q = Math.floor(q);
            }

            A[0] = Math.floor(q%)(MISSING);
            q = Math.floor(q/10);

            if(q==9) {
                nines++;
            } else if (q==10) {
                finalDigit = predigit+1;
                for(j=0;j<nines;j++) {
                    finalDigit = 0;
                }
                predigit=0;
                nines=0;
            } else {
                finalDigit = predigit;
                predigit=q;
                for(j=0;j<nines;j++) {
                    finalDigit = 9;
                }
                nines=0;
            }
        }
        return finalDigit;
    }
}

注意代码是如何变异的。其中添加了随机的(缺少)字符串,并且有几个方程式被截断。

为什么会这样?

编辑1:

玩了一会儿后,我注意到它发生在%符号之后,而不管它的位置如何...所以我的问题是,为什么%运算符在这里有意义,导致事件侦听器屠杀我的代码内容?

编辑2:

在传递给我的回调函数之前,%似乎被解释为转义字符。在将它发送到套接字之前,我尝试使用%,但没有用。

共有1个答案

段晨
2023-03-14

Javascript将%字符解释为转义字符。您看到添加的(MISSING)文本是Javascript告诉您转义字符后面没有两位数转义码的方式。解决这个问题最简单的方法是定义一个函数mod(a, b),它可以完成与模相同的事情。即:

....},
mod:function(a,b) {
    return (a/b-Math.floor(a/b))*b;
}

然后,当您需要使用模运算符时,只需调用

Math.floor(this.mod(q,10));
 类似资料:
  • 问题内容: 我正在使用jQuery对PHP脚本进行AJAX调用,该PHP脚本需要返回嵌入JSON结果中的javascript代码才能执行jQuery代码。如何在JSON中传递JavaScript代码? 问题答案: 两种方式: 您必须将其作为字符串传递并在客户端使用。 您可以使用JSONP,而不是进行调用,而是将客户端脚本插入一个带有指向返回新脚本的服务器端代码的指针。 在任何一种情况下,请确保将其

  • 针对项目的每一次Pull Request就相当于一次代码评审,评审以讨论的形式显示在Pull Request中。 在Pull Request中还能够看到对应的提交(一个或多个),并可以直接针对提交进行代码评注。对于采用集中式协同的项目,即使较少使用 Pull Request,也同样可以使用代码评注。代码评注会触发通知邮件给项目的开发者。 代码评注有两种形式,一种是针对整个提交的评注,另外一种是对代

  • 我试图将youtube视频网址粘贴到tkinter GUI文本框中,并让浏览按钮启动一个子进程调用,该子进程调用需要硬编码的youtube-dl代码,并添加文本框网址。我似乎无法将硬编码的YouTube-dl代码和变量传递到命令行。 谷歌搜索了很多东西来寻找答案,但似乎找不到任何答案。。。 错误代码我在Tkinter回调回溯(最近一次调用上次)中收到异常:文件“C:\Users\hutch\App

  • 问题内容: 我正在读一本教科书,我想知道我们传递给函数的参数为​​什么既不是原始的也不是用户定义的类实例。 我知道它是这两个之一。但是似乎在这里它传递了用户定义的构造方法,例如Runnable()。看来他们想在以后运行线程,但是什么时候?我认为这是合法的,但是我在Java类中从未听说过这种事情。 问题答案: 实际上,这是传递实现Runnable接口的匿名内部类的实例。在Java教程中阅读有关它们的

  • 问题内容: 我正在使用jQueryUI ProgressBar向用户显示他们已使用了多少允许的文件存储。百分比是在后台代码中计算的,应该传递给Javascript。 Aspx代码 背后的代码 似乎无法从隐藏字段中获取百分比数字。任何帮助,将不胜感激。 问题答案: 由于您的隐藏字段是服务器控件,因此可能是ID生成的不是(可能类似于) 您可能需要将生成的客户端ID应用于javascript 或使用另一

  • 我正在通过添加Beanshell预处理器读取xlsx文件。当我在Eclispe中运行代码时,它工作得很好。