在IE和FF中使用错误的json解释,使用chrome

时间:2015-01-19 16:30:47

标签: javascript jquery ajax json

我有一个问题对我来说仍然是一个谜......我有一个执行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。

0 个答案:

没有答案