【问题标题】:Why characters are 'undefined' in internet explorer but not in other browsers为什么字符在 Internet Explorer 中“未定义”,而在其他浏览器中却没有
【发布时间】:2012-01-26 03:51:46
【问题描述】:

请查看网站tdsoft.se 该页面上的脚本在opera,firefox chrome等中工作并按预期打印出“random_1”,但在Internet Explorer中它只是打印出(“undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined”),即'undefined ' 对于每个字母。我的问题是,你们中的一些聪明人是否知道这个问题的答案?

EDIT_______________________________ ________________ _____________

这是代码

<html>
<head>
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var txt;
var buildName = "";
var xmlhttp;
/**
 * Find a longest common subsenquence.
 *
 * Note: this is not necessarily the only possible longest common subsequence though!
 */
function lcs(listX, listY) {
        return lcsBackTrack(
                lcsLengths(listX, listY),
                listX, listY, 
                listX.length, listY.length);
}

/**
 * Iteratively memoize a matrix of longest common subsequence lengths.
 */
function lcsLengths(listX, listY) {
        var lenX = listX.length;
        var lenY = listY.length;

        // Initialize a lenX+1 x lenY+1 matrix
        var memo = [lenX+1];
        for (var i = 0; i < lenX+1; i++) {
                memo[i] = [lenY+1];
                for (var j = 0; j < lenY+1; j++) {
                        memo[i][j] = 0;
                }
        }

        // Memoize the lcs length at each position in the matrix
        for (var i = 1; i < lenX+1; i++) {
                for (var j = 1; j < lenY+1; j++) {
                        if (listX[i-1] == listY[j-1]) {
                                memo[i][j] = memo[i-1][j-1] + 1;
                        }
                        else {
                                memo[i][j] = Math.max(
                                        memo[i][j-1],
                                        memo[i-1][j]);
                        }
                }
        }

        return memo;
}

/**
 * Recursively read back a memoized matrix of longest common subsequence lengths
 * to find a longest common subsequence.
 */
function lcsBackTrack(memo, listX, listY, posX, posY) {

        // base case
        if (posX == 0 || posY == 0) {
                return "";
        }

        // matcth => go up and left
        else if (listX [posX-1] == listY[posY-1]) {
                return lcsBackTrack(memo, listX, listY, posX-1, posY-1) + listX[posX-1];
        }

        else {
                // go up
                if (memo[posX][posY-1] > memo[posX-1][posY]) { 
                        return lcsBackTrack(memo, listX, listY, posX, posY-1);
                }

                // go left
                else {
                        return lcsBackTrack(memo, listX, listY, posX-1, posY);
                }
        }
}

function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}


function myFunction()
{

    loadXMLDoc("http://tdsoft.se/testni.html",handleXML);


}
var checkState = function(xmlhttp, callback) {

try{
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        callback();
        } 
        else {
            // Check back again 1 sec later
            setTimeout(checkState, 1000);
        }
    }
    catch(err){
        setTimeout(checkState, 1000);
    }
};


function handleXML()
  {
checkState(xmlhttp, function() {

   txt=xmlhttp.responseText;
buildName = "random_1";
var myvar = "";
txt = "" + txt;
var lcsString = lcs(txt, buildName);
document.write(lcsString);
});
  }
</script>
</head>
<body onLoad="myFunction()">
</body>
</html>

【问题讨论】:

  • 您尝试过哪个版本的 Internet Explorer?
  • 听起来是字符编码问题。确保您的页面使用与响应文本相同的编码显示。
  • 代码是什么,您的 document.write 或您正在做的任何事情在查看源代码上都没有显示。
  • @epascarello 似乎只发生在 IE 其他浏览器中显示 JS 脚本块
  • var memo = [lenX+1]; 这不会创建 lenX+1 数组,它会创建一个以值 (lenX+1) 作为该元素的单元素数组。既然你自己初始化了所有元素,你真的只需要[]

标签: javascript html xmlhttprequest


【解决方案1】:

这在 IE 中不起作用,listX [posX-1]。这样做的结果是“未定义”,因此您应该使用另一种方法来获取字符,例如 chatAt() 方法

【讨论】:

  • @Sotiris 那么实施后会是什么样子呢? listX.charAt([posX-1]) 不工作
  • 类似 listX.charAt(posX-1),试试吧。
  • 它现在只是说“/html>”,但在其他浏览器中仍然有效
  • 应该是html代码不好。这是另一个问题。
【解决方案2】:

[lenY + 1],例如,不使用lenY + 1 元素初始化数组。它初始化一个数组,其中一个元素设置为lenY + 1。没关系,因为无论如何您都将它们设置为零...只需将其更改为 [] 两次。

我无法弄清楚您的代码,但我认为问题在于 IE 仅允许您使用 charAt 访问字符串字符,而不是使用您似乎在这里使用的括号表示法:

listX[i-1] == listY[j-1]

这里:

else if (listX [posX-1] == listY[posY-1]) {

所以这些比较总是会返回true。会不会是这个问题?

【讨论】:

    【解决方案3】:

    很惊讶 IE 有特殊的 meta 来指定 IE 模式。 将其设置为 IE8 即可解决问题! [] 运算符可以访问字符。

    见: IE modes

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多