2011-02-11 27 views
5

Estoy tratando de devolver una página PHP a través de AJAX y siempre se carga en Chrome. En Firefox, carga aproximadamente el 5% del tiempo, las otras veces se carga sin nada sin errores JS/PHP. Solo estoy haciendo eco de un html directo sin CSS.HTML no aparece en Firefox

Aquí es mi 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); 
      } 
     }); 

    } 

Mi PHP está haciendo básicamente esto un par de veces:

$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/>'; 
     } 
    } 

Obras en algunos navegadores, pero no muestra nada en los demás. ¿Algunas ideas?

ACTUALIZACIÓN: Resulta que se trata de un problema con la geolocalización en Firefox. No consigue la posición, pero no vuelve a la función error_callback. El ejemplo en vivo está aquí: http://adamzwakk.com/geolocate/

+4

Cuando "no devuelve nada", ¿está seguro de que la solicitud AJAX se va a salir? –

+3

Use algo como HTTPFox o Firebug para monitorear el navegador <-> comunicaciones del servidor. Vea lo que sucede durante esas pausas. Sin ningún tipo de información de diagnóstico, sería casi imposible resolver esto. –

+0

No parece que la página PHP se esté cargando a veces en Firefox al azar.Usar POST y GET tampoco hace ninguna diferencia. – adamzwakk

Respuesta

0

¿Estás seguro de que tu navegador es compatible con lo que estás haciendo?

Prueba esto: http://html5demos.com/geo

También puede descargar Wireshark y comprobar la información enviada por usted y devuelto por el servidor.

También es una buena práctica poner en blanco la página php (solo echo una cadena aleatoria) en el mismo directorio donde desea generar su php y ver si está funcionando. En los servidores basados ​​en Windows, es un problema común que PHP se pueda configurar para que funcione en directorios específicos, y debido a la instalación incorrecta puede fallar en otros. Cada navegador maneja los mensajes de error y de advertencia de manera diferente, por lo que si funciona en Chrome, no significa que funciona en todo lo demás. ¿Has probado con Safari y Opera?

+0

También puede descargar wireshark y verificar la información enviada por usted y devuelta desde el servidor. - Firebug lo muestra también – Michael

0

Abrí FireBug y se hizo clic en el enlace para encontrar mi dirección. Devolvió una carga de enlaces que decía "indefinido". En FireBug muestra que el script está volviendo esto:

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

I sangría a hacer que se vea más bonito. Parece que su aplicación no devuelve nada en el XML. ¡También estás cerrando una etiqueta que no está abierta!

0

Uso console.log() con precaución

Usando console.log() en el código JavaScript se produce una excepción cuando Firebug está deshabilitado o no está instalado. (¿95% de las veces?)
Escribí una pequeña función de contenedor "dump (var)" dump.js que comprueba si Firebug está habilitado, por lo que también es seguro usarlo en el código de producción.

PS: me di cuenta:

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

es la variable html definido anteriormente o Quiso decir html2.