好吧,所以我在试图找出如何将我在localStorage中保存的一些数据传递给我编写的php脚本时遇到了一些问题,所以我可以将它发送到服务器上的数据库。我之前找到了一些代码,(https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest),看起来它会起作用,但我没有运气。
这是我保存数据的代码,而不是尝试将其传递给我的phpscript
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(initialize, showError, takeSnap);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function initialize(position) {
var lat = position.coords.latitude,
lon = position.coords.longitude;
var mapOptions = {
center: new google.maps.LatLng(lat, lon),
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true
}
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lon),
map: map,
title: "Current Location"
});
}
function showError(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
alert("User denied the request for Geolocation.");
break;
case error.POSITION_UNAVAILABLE:
alert("Location information is unavailable.");
break;
case error.TIMEOUT:
alert("The request to get user location timed out.");
break;
case error.UNKNOWN_ERROR:
alert("An unkown error occurred.");
break;
}
}
function storeLocal(position) {
if (typeof (Storage) !== "undefined") {
var lat = position.coords.latitude,
lon = position.coords.longitude;
localStorage.latitude = lat;
localStorage.longitude = lon;
}
else {
alert("Your Browser doesn't support web storage");
}
return
}
function snapShot() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(storeLocal, showError);
}
else {
alert("Geolocation is not supported by this browser.");
}
var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open("post", "snap.php?lat=" + localStorage.latitude + "&lon=" + localStorage.longitude, true);
oReq.send();
}
function reqListener() {
console.log(this.reponseText);
}
这是我写的用于将值保存到数据库中的脚本
<?php
// Connecting to the database
mysql_connect("localhost", "username", "password");
mysql_select_db("db_name");
$latitude = mysql_real_escape_string($_GET["lat"]);
$longitude = mysql_real_escape_string($_GET["lon"]);
// Submit query to insert new data
$sql = "INSERT INTO locationsTbl(locID, lat, lon ) VALUES( 'NULL', '". $latitude ."', '". $longitude . "')";
$result = mysql_query( $sql );
// Inform user
echo "<script>alert('Location saved.');</script>";
// Close connection
mysql_close();
?>
答案 0 :(得分:1)
怎么样:
oReq.open("get", "snap.php?lat=" + localStorage.latitude + "&lon=?" + localStorage.longitude, true);
(您还有localStorage.lon
而不是.longitude
)
由于值(字符串)在变量中,您需要连接它们,而不是将它们放在字符串中。
此外,由于您似乎将这些内容传递给PHP以保存到数据库,从语义上讲,您应该使用POST请求...对于AJAX请求,处理方式不同。
在PHP中,您需要使用:
$latitude = $_GET["lat"];
$longitude = $_GET["lon"];
实际获取使用GET请求发送的值。虽然应该转义这些值以避免SQL注入。
另外,我不确定你为什么要设置AJAX请求的onload
属性。相反,请使用onreadystatechange
属性...类似于:
oReq.onreadystatechange = function () {
if (oReq.readyState === 4) {
if (oReq.status > 199 && oReq.status < 400) {
console.log("successful response");
} else {
console.log("failed response: " + oReq.status);
}
}
};
.readyState
属性指的是其状态,其中4
表示已完成(响应已返回)。 .status
属性是指HTTP状态代码。通常在200
&amp;之间400
很好。我知道我看到人们仅检查200
(不是范围)。
<强>更新强>
为了在请求中传递POST参数,您不会将它们附加到URL - 您可以使用.send()
方法传递它们。以下是您的代码示例:
oReq.open("POST", "snap.php", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send("lat=" + encodeURIComponent(localStorage.latitude) + "&lon=" + encodeURIComponent(localStorage.longitude));
要在PHP中检索它们,您可以使用:
$latitude = $_POST["lat"];
$longitude = $_POST["lon"];
答案 1 :(得分:0)
您有代码错误
应该是 oReq.onload = reqListener; oReq.open(“get”,“snap.php?lat =”+ localStorage.latitude +“&amp; lon =”+ localStorage.lon,true); oReq.send();