ReferenceError StringBuilder 未在 javascript 中定义

Posted

技术标签:

【中文标题】ReferenceError StringBuilder 未在 javascript 中定义【英文标题】:ReferenceError StringBuilder is not defined in javascript 【发布时间】:2016-03-08 23:02:46 【问题描述】:

我有一个使用字符串生成器函数的 javascript 函数。它可以在所有主要浏览器(如 IE8+、chrome、firefox 等)上运行 (95%)。我对其进行了测试,它运行良好,但有时我会收到类似的错误“未定义字符串生成器”。它面向一些客户而不是所有客户,我找不到哪个浏览器和版本,所以我想知道 stringbuilder 功能是否适用于所有浏览器?有版本限制吗?我搜索了这个错误,但没有得到任何答案。你们遇到过类似的问题吗?请提出一些链接或方法来解决这个问题。下面是我的代码。

  function GetXmlString() 
        try 
           var sbMain = new StringBuilder();
            sbMain.append("<?xml version='1.0' encoding='UTF-16' ?>");
            sbMain.append("<Application");
            sbMain.append("</Application>");
     
        catch (e) 
            strXml = "";
            //alert("Error in GetXmlString " + e.name + "\n" + e.message);
            var error = "Error in GetXmlString " + e.name + "\n" + e.message
            $.ajax( type: "POST",
                url: "AL_GetAjaxValue.aspx",
                data:  type: "LogError", Error: "" + error + "" ,
                dataType: "html",
                success: function(msg) 

                ,
                error: function() 
                
            );
        

    

我找到了 StringBuilder 声明。这个声明有什么问题吗?请验证此代码。

function StringBuilder(value) 
        this.strings = new Array("");
        this.append(value);
    
    StringBuilder.prototype.append = function(value) 
        if (value) 
            this.strings.push(value);
        
    
    StringBuilder.prototype.clear = function() 
        this.strings.length = 1;
    
    StringBuilder.prototype.toString = function() 
        return this.strings.join("");
    

【问题讨论】:

StringBuilder 不应该是 C# 代码吗? @IonicăBizău I think Yes @GuruprasadRao 是的,那需要在客户端定义。 :) 确实如此.. 但是 OP 说 有时他会出错 那么他一定已经包含了它.. :) 【参考方案1】:

有趣的是,您有时会得到错误,而其他时候不会。你是怎么落入这种方法的? StringBuilder 不是 JavaScript 原生的,而是一个 C# 类。

如果您发现需要为 javascript 定义 StringBuilder,您可以这样做:

//StringBuilder class
function StringBuilder(value)
    this.strings = new Array('');
    this.append(value);


// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value)
    if (value)
        this.strings.push(value);
    


StringBuilder.prototype.appendLine = function(value)
    if(value)
        this.strings.push(value);
        this.strings.push("\n");
    


// Clears the string buffer
StringBuilder.prototype.clear = function ()
    this.strings.length = 1;


// Converts this instance to a String.
StringBuilder.prototype.toString = function ()
    return this.strings.join('');

【讨论】:

抱歉回复晚了。我更新了代码。你能看看吗?帮助表示赞赏。 因此,当函数被定义为 Append 时,您正在调用 .append,因此存在问题。 对不起,谢谢你的意见。我更新了代码。但它在 90% 和 10% 的情况下都可以正常工作。这会是问题吗? 不知道是什么时候创建的,将 StringBuilder 类添加到原型中?也许有时它在范围内,有时它不取决于你的 javascript 是如何设置的。 我更新的代码和你的代码一样。我声明了两个 StringBuilder 对象并将第一个附加到第二个。这有什么区别吗? bMain.append(sb.toString().replace(/%3C/g, "&lt").replace(/%3E/g, "&gt"));

以上是关于ReferenceError StringBuilder 未在 javascript 中定义的主要内容,如果未能解决你的问题,请参考以下文章

ReferenceError:未定义 DartObject

ReferenceError:未定义提取

Rails:ReferenceError:未定义谷歌

ReferenceError:变量未定义

JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]

ReferenceError:找不到变量