【发布时间】:2011-06-25 18:46:15
【问题描述】:
我试图通过 AJAX 返回一个 PHP 页面,它总是在 Chrome 中加载。在 Firefox 中,它加载大约 5% 的时间,其他时候它什么都不加载,也没有 JS/PHP 错误。我只是在没有 CSS 的情况下直接回显 html。
这是我的 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/
【问题讨论】:
-
当它“什么都不返回”时,你确定AJAX请求真的出去了吗?
-
使用 HTTPFox 或 Firebug 之类的东西来监控浏览器服务器通信。看看在这些暂停期间发生了什么。如果没有任何类型的诊断信息,几乎不可能弄清楚这一点。
-
看起来 PHP 页面有时在 Firefox 中根本不会随机加载。使用 POST 和 GET 也没有区别。
-
在其他几个浏览器中也会失败:veerasundar.com/blog/2010/02/… 这种缺乏支持会使其成为我合作的许多客户不支持的功能。
-
我使用的是 Firefox 3.6 和 4.0 测试版,但两者仍然存在该错误。
标签: php jquery geolocation ip-geolocation