0

postLat変数とpostLon変数を検出して更新するために、この関数をコーディングしました。

function searchAddSubmit(){
    var shopId = 1; //random number to test the function
    var postLon, postLat;
    var shopTime = $("#selected-search-result-minutes").val();
    navigator.geolocation.getCurrentPosition(function(position){
        postLat=position.coords.latitude;
        postLon=position.coords.longitude;
        console.log(postLat);
        console.log(postLon);
        console.log('reun');
    },function(error){});
    console.log(postLat+" 1231");
    console.log(postLon+" 1231");
    $.ajax({
        type: "POST",
        url: "search-add-process.php",
        cache: false,
        dataType: "json",
        data:{
            id: shopId,
            time: shopTime, //this value is taken from a form input
            lat: postLat,
            lon: postLon
        },
        success: function (data) {
            if(data.error === true) {
                alert(data.msg);
            } else {
                alert(data.msg);
                //remove output when successful
            }
        }
    });
}

ChromeのJavascriptコンソールツールを使用して変数を調べました(で印刷されていますconsole.log())。結果は次のとおりです。

undefined 1231
undefined 1235
1.2957797
103.8501069
ruen

この点に関して、私はこれらの質問があります:

  1. 変数が更新されないpostLonのはなぜですか?実際、未定義の変数は、実際の値ではなく、ajaxブロックでpostLat渡されます。search-add-process.php
  2. なぜnavigator.geolocation.getCurrentPosition()関数はconsole.log(postLat+" 1231")行の後に実行されるのですか?私が間違っている場合は訂正してください。Javascriptは1行ずつ実行されると常に思っていました。
4

2 に答える 2

1

最初に、Geolocation API にユーザーの現在位置を見つけようとするように指示し、残りの作業を行っている間にそれを手放して検索します。これは非同期実行と呼ばれます。つまり、Geolocation API がユーザーの場所を検索して見つけるのに時間がかかるようにし、残りの作業はあなたが行います (残りのコードは実行されます)。次に、API がその位置を見つけると、渡された関数を実行します。

ajax のコードを成功のコールバックに取り込めば、すべてうまくいきます。

于 2012-05-31T05:46:51.457 に答える
0

呼び出し全体をコールバック関数$.ajax({...});内に配置します。getCurrentPositionたとえば、行の直前または直後に配置しますconsole.log('reun');

于 2012-05-31T05:47:26.167 に答える