我有一个问题对我来说仍然是一个谜......我有一个执行AJAX调用并收到JSON结果的页面。 Chrome中的搜索结果还可以,但由于某种原因,我得到的结果是" null"在IE和FF中。 最奇怪的是,两个变量的JSON输出看起来完全相同,但其中一个是有效的,另一个是非。
JSON输出如下所示
[{"color":"#000000","size":8,"lat":36.7167,"lon":3.25,"name":"Algiers","region":"","temp":18.3,"mintemp":15,"maxtemp":21.7,"content":"","humidity":77,"rain":691,"sunlight":467,{"color":"#000000","size":8,"lat":-8.85,"lon":13.2333,"name":"Luanda","region":"","temp":25.1,"mintemp":21.9,"maxtemp":28.3,"content":"","humidity":79,"rain":367,"sunlight":384}
我收到结果,当我尝试例如alert(json [0] .size)和alert(json [0] .lat)时,第一个为空,第二个为36.7167 ......
在Chrome中,我获得了大小为8的正确值,但是对于FF和IE,我继续变为null,即使您看到的输出完全相同,甚至我的PHP以完全相同的方式生成它,使用 print json_encode($ data,JSON_NUMERIC_CHECK);当我尝试将其转换为字符串时,我得到一个空白值,当转换为十进制时,我得到" 0"。然后我试着gettypeof,我得到两个值都是字符串。所以它们具有相同的数据类型。
以下是生成JSON响应的相关代码部分(size函数没问题,它可以工作并返回正确的值,两个结束变量都是字符串类型):
$result = mysqli_query($con_climate,"
SELECT *
FROM complete
$string"
);
while($row = mysqli_fetch_array($result)){
$lat = $row['Lat'];
}
$size_original = $_GET['size'];
function size($value,$scale_min,$scale_max,$value_min,$value_max){
$scale_min = $scale_min - 0.001;
$scale_max = $scale_max + 0.001;
$scale_perc = ($scale_max-$scale_min)/100;
$percentage = ($value-$scale_min)/$scale_perc;
$size_perc = ($value_max-$value_min)/100;
$calculated = $size_perc*$percentage+$value_min;
return $calculated;
}
$size = size( $size_original,-15,15,-10,10);
$results = array();
$results['size'] = $size;
$results['lat'] = $lat;
array_push($data, $results);
print json_encode($data);
和Ajax电话:
$.ajax({
contentType: "text/JSON",
dataType: "json",
url: file,
success: function (json) {
alert(json[0].lat;
alert(json[0].size;
},
});
我只是随机选择了上面的一些值,但基本上我得到两个警报,一个是正确的数字(对于lat),另一个是" null",但在Chrome和Opera中,正确数字也是如此。并且JSON输出看起来像我在所有浏览器中显示的那样......
Here是JSON。