在Firefox浏览器中无法显示HTML

5

我正在尝试通过AJAX返回一个PHP页面,它总是在Chrome中加载。在Firefox中,它只有大约5%的时间会加载,其他时间它会没有JS / PHP错误地加载但是没有内容。我只是直接回显HTML而没有CSS。

这是我的Ajax:

if(geo_position_js.init()){
            geo_position_js.getCurrentPosition(displayPosition,error_callback,{enableHighAccuracy:true,options:5000});
        }
        else{
            alert("Functionality not available");
        }

        function error_callback(p)
        {
            alert('error='+p.message);
        }       

    function displayPosition(loc) {
        var mylat = loc.coords.latitude;
        var mylong = loc.coords.longitude;
        $.ajax({
            type: "POST",
            url: "distancetest.php",
            data: "long="+mylong+"&lat="+mylat,
            success: function(html2){
                $('#locationinfo').html(html2);
                console.log(html);
           }
        });

    }

我的 PHP 基本上会执行以下操作几次:

$query = "SELECT * FROM tbl_geo WHERE cat_id=1";
    $result = mysql_query ($query) or die(mysql_error());
    echo "<h2>Restaurants</h2>";
    while ($row = mysql_fetch_array($result)){
        if($row['lat'] != ''){
            $distance = distance($_POST['lat'], $_POST['long'], $row['lat'], $row['lng'], "k");
            if($distance < 2000){
                $attractions[] = array('name' => $row['name'], 'address' => $row['address'], 'distance' => $distance);
            }
        }
    }
    $attractions = array_sort($attractions,'distance');
    $attractions = array_values($attractions);
    for ($i = 0; $i <= 10; $i++) {
        if(isset($attractions[$i]['distance'])){
            echo 'You are '.$attractions[$i]['distance'].'km away from '.$attractions[$i]['name'].' at '.$attractions[$i]['address'].'<br/>';
        }
    }

在一些浏览器中能够工作,但在其他浏览器中却没有任何显示。有什么想法吗?

更新:原来这是Firefox中地理位置的问题。它无法获取位置,但不会返回到error_callback函数。示例网站在这里:http://adamzwakk.com/geolocate/


4
“返回空值”时,您确定 AJAX 请求实际已发送出去了吗? - Chris Baker
3
使用类似HTTPFox或Firebug的工具来监控浏览器<->服务器之间的通信,查看在这些暂停期间发生了什么。如果没有任何诊断信息,要弄清楚问题将非常困难。 - Marc B
有时在Firefox中,PHP页面似乎根本没有加载。使用POST和GET也没有任何区别。 - adamzwakk
还会在其他几个浏览器中失败:http://veerasundar.com/blog/2010/02/geolocation-in-html5-browser-and-device-support/。这种缺乏支持将使我与许多客户合作的功能成为不受支持的功能。 - bpeterson76
我正在使用Firefox 3.6和4.0 beta,这个错误在两个版本中仍然存在。 - adamzwakk
3个回答

0
我打开了FireBug并点击了链接以查找我的地址。它返回了一堆链接,显示为“未定义”。在FireBug中,它显示您的脚本正在返回以下内容:
<?xml version="1.0" encoding="utf-8" ?>
  <geoData>
    <restaurants>
    </place>
    </restaurants>
    <accommodations>
    </accommodations>
    <things>
    </things>
  </geoData>

我缩进它使它看起来更好看。你的应用程序似乎在XML中没有返回任何内容。你还关闭了一个未打开的标签!


0

小心使用console.log()

在您的JavaScript代码中使用console.log()会在Firebug被禁用或未安装时抛出异常。(95%的时间?)
我编写了一个小包装函数"dump(var)" dump.js,它检查是否启用了Firebug,因此在生产代码中使用也是安全的。

PS: 我注意到:

 success: function(html2){
   $('#locationinfo').html(html2);
   console.log(html);
 }

html变量之前是否已定义,还是你指的是html2


0

你确定你的浏览器支持你正在做的事情吗?

试试这个: http://html5demos.com/geo

你也可以下载Wireshark并检查你发送和从服务器返回的信息。

在你想要生成PHP的同一目录下放置一个空白的PHP页面(只需回显一个随机字符串),以检查它是否正常工作,这是一个好的实践。在基于Windows的服务器上,PHP可能被设置为在特定目录中工作,并且由于错误安装可能会在其他目录中失败。 每个浏览器都以不同的方式处理错误和警告消息,因此如果在Chrome中运行,则并不意味着它在其他所有浏览器中都能正常工作。你尝试过Safari和Opera吗?


你也可以下载Wireshark并检查你发送和服务器返回的信息。Firebug也可以显示它。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接