如何将保存的localStorage Web数据传递给php脚本?

好吧,所以我在尝试找出如何将我在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();
    ?>

解决方法:

怎么样:

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和200之间. 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"];

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...