3

ここでこの正確な状況が見つからなかったので、質問することにしました。私は、AJAX を使用して PHP ファイルを呼び出し、PHP スクリプトを実行し、xmlhttp.responseText を介して連結された PHP 変数を返し、その応答を警告しようとする JavaScript をいくつか持っています。

JS

function queryDB() {

    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState===4 && xmlhttp.status===200)
        {
            alert(xmlhttp.responseText);

        }
    }

    xmlhttp.open("GET","php/location.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();

}

PHP

<?php

$con = mysql_connect("<THIS DATA HIDDEN FOR SECURITY PURPOSES, IT IS CORRECT");

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("gpstracks", $con);

$bus = $_GET['bus'];

$query = "SELECT lat, lon from tracksarchive where runnerid = '$bus' ORDER BY time DESC LIMIT 1;";

$latlon = mysql_query($query);

while ($row = mysql_fetch_array($latlon, MYSQL_ASSOC)) {
    $lat = $row['lat'];
    $lon = $row['lon'];
}

$result = $lat . ", " . $lon;

echo $result;

mysql_close($con);
?>

はい、mysql_ が mysqli_ に置き換えられたことは知っています。これについては後で説明します。(フォーム送信を使用して)PHPを単独で実行すると、テーブルから正しい値が表示されますが、xmlhttp.responseTextに警告すると、コンマとスペースのみが取得され、変数は渡されません。私が間違っていることは何か分かりますか?助けていただければ幸いです。

補足: 最近の AJAX 呼び出しの推奨方法は jQuery であることは知っていますが、jQuery を使用すると、この JavaScript が存在するページのコンポーネントが機能しません。

4

3 に答える 3

3

警告するとxmlhttp.responseText-コンマとスペースのみを取得します-渡された変数はありません

GETを適切に実行していません。あなたが持っているあなたのJavaScriptで

xmlhttp.open("GET","php/location.php",true);

つまり、URI クエリ文字列なしでGET要求を実行しました。

あなたのPHPには

$bus = $_GET['bus'];

つまり、何も渡されなかったことを除いて、URIクエリ文字列からこのデータを取得しているため、これは空になります。

$query = "SELECT lat, lon from tracksarchive where runnerid = '$bus' ORDER BY time DESC LIMIT 1;";

期待どおりに動作しません。

あなたは本当に次のようなことをしたかった

xmlhttp.open(
    "GET",
    "php/location.php?bus="+window.encodeURIComponent(foobar),
    true
); // foobar your value for `bus`

$busさらに、 SQL インジェクションに対してオープンであるため、サーバー側で のサニタイズを行う必要があります。

于 2013-06-13T14:14:37.563 に答える
1

メソッドでリクエストを送信する場合、パラメータを URLGETに手動で追加する必要があります。busだから、書き直して

xmlhttp.open("GET","php/location.php",true);

xmlhttp.open("GET","php/location.php?bus=value",true);
于 2013-06-13T14:19:23.320 に答える
0

PHP ファイルの URL で「bus」を渡す必要があります。

于 2013-06-13T14:14:24.920 に答える