below is what I'm attempting to use for my site, this php page shows up without any issues in Firefox, and Chrome.
下面是我试图用于我的网站,这个PHP页面在Firefox和Chrome中没有任何问题。
For some reason it doesn't appear to be working up in IE(tested on 8 and 9) I dont really know what is wrong here.
出于某种原因,它似乎没有在IE中工作(在8和9测试)我真的不知道这里有什么问题。
The error I am getting in IE8 is "Not a valid 2d Array" this appears to be coming from the google hosted .js
我在IE8中遇到的错误是“不是一个有效的二维数组”这似乎是来自谷歌托管的.js
I'm wondering why this is occuring in IE8 only and not Chrome or Firefox?
我想知道为什么这只出现在IE8而不是Chrome或Firefox?
<?php
// Top snippet of code comes from:
// www.ip2nation.com/ip2nation/Sample_Scripts/Output_Full_Country_Name
// and adapted as necessary.
$server = 'sanitized'; // MySQL hostname
$username = 'sanitized'; // MySQL username
$password = 'sanitized'; // MySQL password
$dbname = 'sanitized'; // MySQL db name
// 1 address per line, or feed with a DB if you're feeling clever.
$lines = file('blocklist.txt');
$db = mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());
$bans = array();
foreach ($lines as $lnum => $line)
{
$l=rtrim($line);
$sql = 'SELECT
c.country
FROM
ip2nationCountries c,
ip2nation i
WHERE
i.ip < INET_ATON("'.$l.'")
AND
c.code = i.country
ORDER BY
i.ip DESC
LIMIT 0,1';
list($cc) = mysql_fetch_row(mysql_query($sql));
if ($cc != "")
if(empty($bans["$cc"]))
{
$bans["$cc"] = 1;
}
else
{
$bans["$cc"]++;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content="HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<script type='text/javascript' src='https://www.google.com/jsapi'>
</script>
<script type='text/javascript'>
google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);
function drawRegionsMap() {
var data = google.visualization.arrayToDataTable([
['Country','Blocks'],
<?php
foreach ($bans as $key => $value)
print"['$key', $value],\n";
?>
]);
var options = {
backgroundColor : '#baecfd',
colors : ['#FFFFFF', '#FF0000']
};
var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
chart.draw(data, options);
};
</script>
<title></title>
<style type="text/css">
div.c1 {width: 900px; height: 500px;}
</style>
</head>
<body>
<div id="chart_div" class="c1"></div>
</body>
</html>
The code when compiled in IE is:
在IE中编译时的代码是:
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);
function drawRegionsMap() {
var data = google.visualization.arrayToDataTable([
['Country','Blocks']
['Japan', 11]
['United States', 45]
['Argentina', 1]
['Brazil', 1]
['Bosnia and Herzegovina', 1]
['Germany', 4]
['France', 2]
['Russia', 5]
['China', 24]
['Thailand', 1]
['New Zealand (Aotearoa)', 1]
['Turkey', 1]
['Korea (South)', 6]
['Panama', 2]
['*', 6]
['Canada', 14]
['Luxembourg', 1]
['United Kingdom', 1]
['Philippines', 1]
['Singapore', 3]
['Switzerland', 2]
['*', 2]
]);
var options = {
backgroundColor : '#25383c',
colors : ['#FFFFFF', '#FF0000']
};
var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
chart.draw(data, options);
};
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
The code when compiled in Chrome is:
在Chrome中编译时的代码是:
<html>
<head>
<script type='text/javascript' src='https://www.google.com/jsapi'></script>
<script type='text/javascript'>
google.load('visualization', '1', {'packages': ['geochart']});
google.setOnLoadCallback(drawRegionsMap);
function drawRegionsMap() {
var data = google.visualization.arrayToDataTable([
['Country','Blocks'],
['Japan', 11],
['United States', 45],
['Argentina', 1],
['Brazil', 1],
['Bosnia and Herzegovina', 1],
['Germany', 4],
['France', 2],
['Russia', 5],
['China', 24],
['Thailand', 1],
['New Zealand (Aotearoa)', 1],
['Turkey', 1],
['Korea (South)', 6],
['Panama', 2],
['*', 6],
['Canada', 14],
['Luxembourg', 1],
['United Kingdom', 1],
['Philippines', 1],
['Singapore', 3],
['Switzerland', 2],
['*', 2],
]);
var options = {
backgroundColor : '#25383c',
colors : ['#FFFFFF', '#FF0000']
};
var chart = new google.visualization.GeoChart(document.getElementById('chart_div'));
chart.draw(data, options);
};
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
1 个解决方案
#1
5
var data = google.visualization.arrayToDataTable([
['Country','Blocks'],
<?php
foreach ($bans as $key => $value)
print"['$key', $value],\n";
?>
]);
Will return:
var data = google.visualization.arrayToDataTable([
['key1', value1],
['key2', value2],
]);
The extra comma at the end of the second one will break it. See this:
第二个结尾处的额外逗号会破坏它。看到这个:
http://www.openjs.com/articles/ie/array_comma_problem.php
var sample = {
'hello':'world',
'foo':'bar', //This is 'the last comma'
}
alert("Hello World");
In most browsers, the final ',' is optional - its presence will not make any difference in the script. But IE will decide to do something that defies explanation - it just ignores everything after that bit of code. The 'Hello World' alert will never be seen in an IE browser.
在大多数浏览器中,最终的','是可选的 - 它的存在不会对脚本产生任何影响。但IE会决定做一些无法解释的事情 - 它只是忽略了那段代码之后的所有事情。 IE浏览器中永远不会出现“Hello World”警报。
Also see: https://*.com/a/5139395/504299 :
另见:https://*.com/a/5139395/504299:
Historically speaking, ES3 disallowed having a trailing comma when defining an object literal. This was one thing that IE did get right, but most other bowser vendors went south and did allow the trailing comma. So technically it was a bug in the other browsers that supported it.
从历史上看,ES3在定义对象文字时不允许使用尾随逗号。这是IE确实正确的一件事,但大多数其他的bowser供应商向南走,并允许尾随逗号。从技术上讲,这是其他支持它的浏览器中的一个错误。
#1
5
var data = google.visualization.arrayToDataTable([
['Country','Blocks'],
<?php
foreach ($bans as $key => $value)
print"['$key', $value],\n";
?>
]);
Will return:
var data = google.visualization.arrayToDataTable([
['key1', value1],
['key2', value2],
]);
The extra comma at the end of the second one will break it. See this:
第二个结尾处的额外逗号会破坏它。看到这个:
http://www.openjs.com/articles/ie/array_comma_problem.php
var sample = {
'hello':'world',
'foo':'bar', //This is 'the last comma'
}
alert("Hello World");
In most browsers, the final ',' is optional - its presence will not make any difference in the script. But IE will decide to do something that defies explanation - it just ignores everything after that bit of code. The 'Hello World' alert will never be seen in an IE browser.
在大多数浏览器中,最终的','是可选的 - 它的存在不会对脚本产生任何影响。但IE会决定做一些无法解释的事情 - 它只是忽略了那段代码之后的所有事情。 IE浏览器中永远不会出现“Hello World”警报。
Also see: https://*.com/a/5139395/504299 :
另见:https://*.com/a/5139395/504299:
Historically speaking, ES3 disallowed having a trailing comma when defining an object literal. This was one thing that IE did get right, but most other bowser vendors went south and did allow the trailing comma. So technically it was a bug in the other browsers that supported it.
从历史上看,ES3在定义对象文字时不允许使用尾随逗号。这是IE确实正确的一件事,但大多数其他的bowser供应商向南走,并允许尾随逗号。从技术上讲,这是其他支持它的浏览器中的一个错误。