2

さて、私が書いたphpスクリプトにlocalStorageに保存したデータを渡す方法を見つけようとする際に問題が発生したので、それをサーバー上のデータベースに送信できます。以前にいくつかのコード ( 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();
    ?>
4

2 に答える 2

1

どうですか:

oReq.open("get", "snap.php?lat=" + localStorage.latitude + "&lon=?" + localStorage.longitude, true);

localStorage.lon代わりにもありました.longitude

値 (文字列) は変数に含まれているため、それらを文字列に入れるのではなく、連結する必要があります。

また、これらのものをPHPに渡してデータベースに保存しているように見えるので、意味的に言えば、AJAXリクエストでは異なる方法で処理されるPOSTリクエストを使用する必要があります。

PHP では、以下を使用する必要があります。

$latitude = $_GET["lat"];
$longitude = $_GET["lon"];

GET リクエストで送信された値を実際に取得します。ただし、これらの値は SQL インジェクションを避けるためにエスケープする必要があります。

onloadまた、 AJAX リクエストのプロパティを設定している理由がわかりません。代わりに、次の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&の間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"];
于 2013-04-16T16:53:32.183 に答える
0

コードエラーがあります

oReq.onload = reqListener; である必要があります。oReq.open("get", "snap.php? lat="+localStorage.latitude+"&lon="+localStorage.lon, true); oReq.send();

于 2013-04-16T16:53:46.090 に答える