2011-02-11 57 views
5

我想通过AJAX返回一个PHP页面,它总是在Chrome中加载。在Firefox中,它会加载大约5%的时间,其他时间加载时没有任何JS/PHP错误。我只是在没有CSS的情况下直接回应html。HTML没有显示在Firefox

这里是我的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请求实际上是否正在发布? – 2011-02-11 19:35:23

+3

使用类似HTTPFox或Firebug来监视浏览器<->服务器通信。看看在这些暂停期间发生了什么。没有任何类型的诊断信息,就几乎不可能弄清楚。 – 2011-02-11 19:50:10

回答

0

你确定你的浏览器支持你在做什么吗?

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

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

将空白的PHP页面(只是回显一个随机字符串)放在你想要生成你的php的同一目录中,看看它是否工作也是一个好习惯。在基于Windows的服务器上,这是一个常见的问题,PHP可以设置为在特定目录中工作,并且由于错误安装可能会导致其他错误。每个浏览器都会以不同方式处理错误和警告消息,因此,如果它在Chrome中运行,并不意味着它适用于其他任何事情。你用Safari和Opera试过吗?当Firebug是禁用或者未安装

0

我打开FireBug并点击链接查找我的地址。它返回了一个链接负载说“未定义”。在FireBug中,它显示您的脚本正在返回:

<?xml version="1.0" encoding="utf-8" ?> 
    <geoData> 
    <restaurants> 
    </place> 
    </restaurants> 
    <accommodations> 
    </accommodations> 
    <things> 
    </things> 
    </geoData> 

我缩进它使其看起来更好。看起来你的应用程序没有在XML中返回任何东西。您也正在关闭一个未打开的标签!

0

使用的console.log()谨慎

使用的console.log()在JavaScript代码中抛出一个异常。 (95%的时间?)
我写了一个小包装函数“dump(var)”dump.js,检查是否启用了萤火虫,因此在生产代码中使用它也是安全的。

PS: 我注意到:

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

是前面定义的变量html还是你的意思是html2