2011-02-11 51 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