1

まず、すべての洞察と支援に感謝します。

テスト用に9つのエントリを持つMySQLデータベース(実際には単一のテーブル)があります。フィールドには、id、name、address、city、state、zip、lat、lng などが含まれます。私の目標は、位置認識が有効になっているメイン ページをロードし、Javascript を使用してユーザーの緯度と経度を変数として設定し、AJAX を使用してそれらを送信することです。変数を別の.phpページに移動して、変数をクエリの計算式に配置できるようにします。変数が送信され、ページ全体が処理された後、サーバーからクエリの結果をフェッチする 2 番目の AJAX インスタンスがあります。

私の 2 番目の AJAX インスタンスは、2 番目のページの結果を正常に呼び出します。手動で変数を設定すると、適切にソートされたリストが得られます。Javascript 変数に依存すると、エラーが発生します。どこが間違っているのかわかりません。

これは重複した質問のように思えるかもしれません。私は過去 8 時間を SO に費やし、他の質問を読んで助けてくれることを願っていました。残念ながら、私が試したすべての例は機能しません。

メイン ページ (test.php) のコードは次のとおりです。

<html><head></head><body>
<script type="text/javascript">
if(navigator.geolocation)
  {
  navigator.geolocation.getCurrentPosition(function(position)
   {
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
$.ajax({
        type: "POST", 
        url:  "locations-ajax.php", 
        data: 'x='+lat+'&y='+lng,
        });  
 });
}
</script>
<!--begin list area-->
<script>
function getXMLHttp()
{
var xmlHttp
try
{
//Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
//Internet Explorer
try
{
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
  try
  {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  catch(e)
  {
    alert("Your browser does not support AJAX!")
    return false;
  }
}
}
return xmlHttp;
}
function MakeRequest()
{
var xmlHttp = getXMLHttp();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
  HandleResponse(xmlHttp.responseText);
}
  }
 xmlHttp.open("GET", "locations-test.php", true); 
 xmlHttp.send(null);
}

function HandleResponse(response)
{
document.getElementById('listarea').innerHTML = response;
}
</script>
<div class="container"><input type='button' onclick='MakeRequest();' value='Get List'/></div>
<div class="container"><div id="listarea">
</div></div></div>
</body>
</html>

ソートされたリストを生成するための私のページは次のとおりです: (locations-test.php)

<?php
/*   $x = 32.839001;
$y = -79.852316;   */
mysql_connect("localhost", "root", "") or die(mysql_error());
 echo "Connected to MySQL<br />";
mysql_select_db("test_db") or die(mysql_error());
 echo "Connected to Database <br>";
// Make a MySQL Connection
  $x = @$_POST['x'];
  $y = @$_POST['y']; 
 if (!empty($x)){
        echo 'x not empty';
    }else{
        echo 'x is not set or empty';
    }
    echo "$x";
 echo "<br>";
    if (!empty($y)){
        echo 'y not empty';
    }else{
        echo 'y is not set or empty';
    }
 echo "<br>";  

$query = "SELECT * , ( 3959 * acos( cos( radians($x) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($y) ) + sin( radians($x) ) * sin( radians( lat ) ) ) ) AS distance FROM locations HAVING distance < 2500 ORDER BY distance LIMIT 0 , 20;"; 
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
    echo "<div class='row'><div class='logo'><img src='foo.png' width='20' height='20'></div><div class='siteblock'><div class='sitename'>"; 
    echo $row['site_name'];
    echo "</div><div class='address'>"; 
    echo $row['street_number'];
    echo " ";  
    echo $row['street_name'];
    echo "</div></div></div>"; 
}
?>

テストをコードに残しましたが、コメントアウトしました。変数に値を割り当てると、テーブルに適切な結果が得られ、test.php に適切に出力されます。

ページはデータベースに問題なく接続しますが、緯度と経度の値が test.php から locations-test.php に渡されません。

何が欠けているのか本当にわかりませんが、うまくいけばそれは単純なものです。PHP 5.4.3、MySQL 5.5.24、および Apache 2.2.22 で WAMP 64 ビットを実行しています。

それが他の何よりも私の側の見落としであることを願っています。

4

2 に答える 2

3

jQueryを使用しているので、XMLHTTP関数を使用する必要はまったくありません。また、jQueryを介してデータを送信し、XMLHTTPを介して取得しようとしているようです。それは正しくありません。次のようにコードを書き直すことができます。

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {
        $.ajax({
            type: "POST",
            url: "locations-ajax.php",
            data: {
                x: position.coords.latitude,
                y: position.coords.longitude
            },
            success: function (data) {
                $("#listarea").html(data);
            }
        });
    });
}
于 2013-01-27T11:16:37.170 に答える
2

ajaxリクエストにJqueryを使用することを検討している場合は、オブジェクトとして送信するデータをコーディングする必要があります。

$.ajax({
    type: "POST", 
    url:  "locations-ajax.php", 
    data: {
         lat: lat,
         lng: lng 
    }
});

これにより、PHPが期待するとおりにデータがサーバーに送信されます。また、前のコードのajaxリクエストの最後の設定の後にコンマがあったことにも注意してください。


しかし、Jqueryがないと、MakeRequest関数で変数を送信していないようです。ジオロケーションコードを追加し、そこから座標を送信する必要があります。

function MakeRequest()
{
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(function(position)
        {
            var lat = position.coords.latitude;
            var lng = position.coords.longitude;
            var xmlHttp = getXMLHttp();
            xmlHttp.onreadystatechange = (function()
            {
               if (xmlhttp.readyState==4 && xmlhttp.status==200)
               {
                   HandleResponse(xmlHttp.responseText);
               }
            });
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlHttp.open("POST", "Encoder/Index", true); 
            xmlHttp.send("x=" + lat + "&y=" + lng);
        });
    }
}

これはあなたの目標を達成するはずです。

于 2013-01-27T07:48:28.523 に答える