2017-10-01 2 views
0

Ich versuche, den aktuellen Standort des Benutzers zu erhalten.Kann JS-Variable mit AJAX nicht an PHP übergeben

Ich habe JS-Skript, um aktuelle Breite und Länge mit AJAX zu erhalten, um js Variablen zu index.php zu senden.

$(document).ready(function() { 
if ("geolocation" in navigator){ 
    navigator.geolocation.getCurrentPosition(function(position){ 
      var userLat = position.coords.latitude; 
      var userLong = position.coords.longitude; 
      console.log(userLong); 
      console.log(userLat); 

      $.ajax({ 
       type: 'POST', 
       url: 'index.php', 
       data: { 
       userLat : userLat, 
       userLong : userLong 
       }, 
       success: function(data) 
       { 
        console.log(data); 

       } 

      }); 

    }); 
}else{ 
    console.log("Browser doesn't support geolocation!"); 
}}); 

Dann versuche ich dies in meinem index.php zu tun:

echo $_POST['userLat']; 
echo $_POST['userLong']; 

Nichts auftaucht. Danke im Voraus.

+2

Gibt es in den Debugging-Tools Ihres Browsers Fehler auf der Konsole? Welche Netzwerkanforderungen werden gestellt und welche Daten sind in diesen Anfragen enthalten? Wenn Sie debuggen, wird der AJAX-Aufruf überhaupt ausgeführt? Was genau ist die Antwort des Servers? – David

+0

Es zeigt korrekte Ausgabe für: console.log (userLong); Konsole.log (BenutzerLat); Keine anderen Fehler. Auch für die Konsole, log (Daten) zeigt es den gesamten Seitencode, ich bin mir nicht sicher warum. –

+0

Nun, es zeigt, was von dieser AJAX-Anfrage zurückgegeben wird. Wenn 'index.php' die gesamte Seite zurückgibt, wird die gesamte Seite angezeigt. Wo genau suchen Sie die AJAX-Werte? Überprüfen Sie nicht die Konsolenprotokollantwort? – David

Antwort

1

Nichts zeigt sich.

Und das ist richtig Sie nie durch das Surfen inde.php irgend etwas bekommen, weil es keine POST zu diesem Zeitpunkt ist, ist AJAX internes und der einzige Weg, um ein Ergebnis zu zeigen, von index.php in der Seite ist dass du daraus einen Ajax-Ruf schickst.

Hierbei:

success: function(data) 
      { 
       console.log(data); 

      } 

Sie können steuern, wo Ihre Daten zu zeigen, dass durch aus index.php kommt, zum Beispiel alert(data) oder document.getElementById("someelement").innerHTML=data; und so weiter.

1

Es könnte helfen, eine dataType für den Ajax zu definieren und zurückzugeben.

fügen Sie diese in der Liste der ajax Optionen

dataType: 'json', 

Dann in index.php kodieren und ein JSON-String Echo. Entfernen Sie die Linien

echo $_POST['userLat']; 
echo $_POST['userLong']; 

sie ersetzen mit

echo json_encode($_POST); 

Die console.log(data); in der Erfolgsfunktion sollte ein Objekt mit zwei Veröffentlichungen: ‚userlat‘ und ‚userLong‘ und die zugehörigen Werte für jeden. Oder es sollte, wenn $_POST diese beiden Elemente hatte.

Wenn Sie den Browser-Bildschirm aktualisieren möchten, müssen Sie data nehmen und damit das DOM modifizieren.

+0

jetzt meine AJAX-Code sieht wie folgt aus: $ Schnipsel ({ Typ: 'POST', url: 'index.php', datatype: 'json', Daten: { userLat: userLat, userLong : userLong }, Erfolg: function (data) { console.log (data); } }); und in index.php Ich habe echo json_decode ('$ _ POST'); Noch echo "nichts" und Konsolenprotokoll für console.log (Daten); ist jetzt leer. –

+0

Sollte 'json_encode' sein, nicht' json_decode'. Entfernen Sie auch die einfachen Anführungszeichen um '$ _POST'. Verwenden Sie dieses 'echo json_encode ($ _ POST);' – DFriend

+0

Das 'echo' von einer Funktion, die eine Ajax-Anfrage bearbeitet, wird nicht an die Browser-Ausgabe gesendet. Es wird an die "Erfolg" -Funktion Ihrer Ajax-Anweisung gesendet. – DFriend

Verwandte Themen