【问题标题】:ReferenceError StringBuilder is not defined in javascriptReferenceError StringBuilder 未在 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 说 有时他会出错 那么他一定已经包含了它.. :)

标签: javascript jquery asp.net stringbuilder


【解决方案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"));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2016-11-05
相关资源
最近更新 更多