0

入力フィールドの現在の値を取得し、送信を使用せずに、フィールドの値に基づいてデータベースからいくつかの情報をエコーし​​たい。

たとえば、サイトの新しいプロファイルを入力するときに、[送信] をクリックして、ユーザー名が既に使用されている場合に戻るという面倒な作業を行う代わりに、そのフィールドの横にエラー メッセージを表示する場合などです。

これは私がこれまでに得たものです:

<html>
<body>
<form name='Form'>
Date: <input type='text' id='sheetid' />
<input type='button' onclick='ajaxFunction()' value='Query!' /> <br />
</form>
<div id='content'>Result</div>
</body>

<script language="javascript" type="text/javascript">
function ajaxFunction(){
var ajaxRequest;
try{
ajaxRequest = new XMLHttpRequest();
} catch (e){
    try{
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
        ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
        alert("ERROR!");
        return false;
        }
    }
}
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById('content');
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }
    var sheetid = document.getElementById('sheetid').value;
    var queryString = "?url=" + sheetid;
    ajaxRequest.open("GET", "test.php" + queryString, true);
    ajaxRequest.send(null); 
}
</script>

</html>

そして私のphp:

<?
$st=$_POST['sheetid'];
require_once('database_connect.php');
$inf = "SELECT * FROM `comments` WHERE date='$st' ORDER BY time ASC";
 $info = mysql_query($inf);
     if(!$info) die(mysql_error());
   $info_rows = mysql_num_rows($info);
     if($info_rows > 0) {
   echo '<table width="95%">';
while($info2 = mysql_fetch_object($info)) {
echo '<tr>';
echo '<td>';echo '<a href="mailto:'.$info2->username.'@mail.com">'.stripslashes($info2->username).'</a>'; echo "("; echo date('H:i', $info2->time)."): "; echo stripslashes($info2->comment).'</td>'.'</tr>';
}
}
?>

これがコメントを表示しない理由はわかりませんが、クエリボタンを押さずに機能させる方法もわかりませんが、ユーザーが入力を終了するか、入力ボックスからクリックした後です。

フィードバックをいただければ幸いです。

タナクス

4

1 に答える 1

2

オブジェクトをどこで初期化しXmlHttpRequestますか? このようなもの :

var ajaxRequest ;
if (window.XMLHttpRequest) 
{ 
ajaxRequest = new XMLHttpRequest();
}
else if (window.ActiveXObject) 
{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

私の答えを完成させるために、2つのことを追加します:

  • 第 1 :onreadystatechange関数では、次のような HTTP 応答コードをテストすることを忘れないでください。
    if (xhr.readyState == 4 && xhr.status == 200)

  • 2 番目: jQueryPrototypeなどの JS フレームワークを使用して、AJAX 呼び出しを簡素化できます。

応答 2

これを追加してみてください:

ajaxRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');

応答

GET メソッドを使用してデータを投稿ajaxRequest.open("GET", "test.php" + queryString, true);しますが、PHP ではPOST var を使用してデータを取得します$_POST['sheetid'] 。代わりにこれを使用してください。

$_GET['sheetid'];
于 2013-09-23T12:29:13.943 に答える