Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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
Javascript IE错误-2147024882_Javascript_Internet Explorer_Google Maps - Fatal编程技术网

Javascript IE错误-2147024882

Javascript IE错误-2147024882,javascript,internet-explorer,google-maps,Javascript,Internet Explorer,Google Maps,我正在开发一个web页面,服务器端使用vb.net,google maps的.aspx页面使用一些javascript。这个网页是一个很大的地理信息系统,它可以绘制出格鲁吉亚某些县内的所有区块群,因此在一个.js文件中大约有15MB的纯[纬度,经度]点。在chrome/firefox中,加载地图,然后加载脚本,该脚本触发回调以绘制它定义的多边形,然后将多边形绘制到地图上。在IE中,地图被加载,当脚本被加载时,控制台在第1行有一个SCRIPT14:error-2147024882。除地图上的多边形

我正在开发一个web页面,服务器端使用vb.net,google maps的.aspx页面使用一些javascript。这个网页是一个很大的地理信息系统,它可以绘制出格鲁吉亚某些县内的所有区块群,因此在一个.js文件中大约有15MB的纯[纬度,经度]点。在chrome/firefox中,加载地图,然后加载脚本,该脚本触发回调以绘制它定义的多边形,然后将多边形绘制到地图上。在IE中,地图被加载,当脚本被加载时,控制台在第1行有一个
SCRIPT14:error-2147024882
。除地图上的多边形外,所有内容都正确显示。js文件的结构是一个只有几个变量的声明

var allPolys = [
    [
      //poly1 points
      [x1,y1],
      [x2,y2],
      ...
    ],
    [
      //next poly
      [x1,y1],
      ...
    ]
]
^^是如何在.js中定义每个多边形的。这是因为所有的点都在一个数组中而导致的大小问题吗

映射代码:

            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var tract = "new google.maps.Polygon({ strokeWeight: 0.7, path: [";
                    for (var j = 0; j < allTracts[i].length; j++)
                        tract += " new google.maps.LatLng(" + allTracts[i][j][0] + "," + allTracts[i][j][1] + "),";
                    tract = tract.substring(0, tract.length - 1) + "], map: map });";
                    eval(tract);
                }

                //this is all for other 'multipolygons' that are in some maps
                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        var subTract = "new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: '" + colors[i % colors.length] + "', fillColor: '" + colors[i % colors.length] + "', path: [";
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            subTract += " new google.maps.LatLng(" + multiPolys[i][j][k][0] + "," + multiPolys[i][j][k][1] + "),";
                        subTract = subTract.substring(0, subTract.length - 1) + "], map: map });";
                        eval(subTract);
                    }
                }
            }
函数drawPolys(){
对于(变量i=0;i
在Chrome中,页面加载得非常漂亮

编辑: 不带eval()的新映射函数

函数drawPolys(){
对于(变量i=0;i
就我的谷歌搜索而言,这似乎是一个“内存不足”的问题:

“错误-2147024882内存不足,无法执行此操作。-MAPI\u E\u内存不足(Microsoft Exchange Server信息存储)

检查循环的长度(Multipoly和allTracts)


还要检查字符串的长度并减去,它们可能太长了

我相信我已经找到了这个错误的确切原因

编辑:我相信这个bug在IE 10中已经修复了

我的测试表明IE将拒绝执行包含216-3个以上数字的Javascript文件。因此,如果.js文件包含65533数字,IE将执行它。但如果它包含65534或更多数字,您将得到错误
−2147024882

我在这里展示了一个测试用例来演示这个问题:

我正在使用的站点从S3上托管的Javascript文件中加载大量JSON数据。起初我认为这是由于IE中的一些Javascript源文件大小限制造成的。但一点测试表明,IE可以处理.js文件,这些文件比引发这个神秘的
−2147024882
错误


在我的例子中,解决方法是在生成.js文件时将int和float编码为字符串,并使用parseInt和parseFloat来解释它们。

eval(tract)
是不需要的!当你可以调用
新的google.maps.LatLng
时,你为什么要使用它?是否可以发布JSFIDLE或指向运行页面的链接,我们可以使用它来评估问题?只需几行代码,没有上下文就很难调试问题。尽管我同意,这里不需要eval。我认为s是一个“内存不足”的问题。Multipoly和allTracts的长度是多少?eval()不是吗?我会看看是否可以从那里得到它。我想我需要它,因为多边形中的点数不同。我想我可以循环它,并用push()更改路径属性或者别的什么。我会研究一下。Multiploys永远不会超过10。根据我映射的状态的多少,allTracts可以在100-1000之间。在最近的测试中,我可以让它在85左右使用allTracts,但不是125左右。几天前,我的地图显示了950个allTracts长度和大约10个Multiploys。页面I在上。我发布的页面只是我正在处理的页面的地图。在chrome中打开
            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var path = [];
                    for (var j = 0; j < allTracts[i].length; j++)
                        path.push(new google.maps.LatLng(allTracts[i][j][0],allTracts[i][j][1]));
                    new google.maps.Polygon({ strokeWeight: 0.7, path: path, map: map });
                }

                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    var path = [];
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        path[j] = [];
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            path[j].push(new google.maps.LatLng(multiPolys[i][j][k][0],multiPolys[i][j][k][1]));
                    }
                    new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: colors[i % colors.length], fillColor: colors[i % colors.length], paths: path, map: map });
                }
            }