PHPファイルからJqueryのgetJSONメソッドにJSON文字列を転送できません
これは私が欲しいものです。input.phpというPHPページで、ユーザーはhtmlフォームでユーザー名を送信します。これはMYSQLデータベースに保存されます。すべてのユーザー名についてMYSQLデータベースにクエリを実行するresults.phpというページがあります。
私が行う必要があるのは、5秒ごとにいくつかのjqueryコード(おそらくgetJSON)がresults.php(同じページ)からJSON文字列を取得することです。このJSON文字列は、ユーザーがinput.phpページにユーザー名を追加する可能性があるため更新される可能性があります。
これはinput.phpファイルです
<form name="input" action="<?php $_SERVER['PHP_SELF']?>" method="post">
Usernames: <input type="text" name="usernames" />
<input type="submit" value="Submit" name="submit" />
</form>
<?php
if(isset($_POST['submit'])) {
$link = mysql_connect('', '', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db('', $link);
if (!$db_selected) {
die ('Can\'t use : ' . mysql_error());
}
$result = mysql_query("INSERT INTO users(user_name) VALUES('".$_POST['usernames']."')");
if (!$result) {
die('Invalid query: ' . mysql_error());
}
}
?>
これはresults.phpファイルです
<script
type="text/javascript" src="jquery-1.7.1.min.js"></script>
<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
die ('Can\'t use test : ' . mysql_error());
}
$result = mysql_query("SELECT user_name FROM users");
if (!$result) {
die('Invalid query: ' . mysql_error());
}
$names = array();
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $key => $val) {
$names[][$key] = $val;
}
}
echo json_encode($names);
?>
<script type="text/javascript">
$.getJSON("http://localhost/test/results.php", function(json){
alert("JSON Data: " + json);
});
</script>
<div></div>
どのjqueryを配置するか、またはこれを適切に実行している場合でも、行き詰まっています。最終結果は、ページを更新せずにメールを受信するGmailのようなものです。しかし、私のシステムは、ページを更新せずに5秒ごとにデータベースからユーザー名を取得していました。 getJSONメソッドについて読んだことがありますが、完全に理解できていないため、非常に詳細な説明が必要になる場合があります。私がこの目的を間違った方法で行っている場合は、私に知らせて、これを行う方法の良い習慣を知らせてください。
このURLをブラウザで試しましたが、phpコードからエコーされたJSON文字列以外の結果はありません。
これは私のJSON文字列です
[{"user_name": "matt"}、{"user_name": "matt"}、{"user_name": "peter"}、{"user_name": "jim"}、{"user_name": " sam "}]
答え :
解決策:
探しているものはAJAXと呼ばれ、それを達成するにはjavascriptが必要になります。洗練された簡単な方法が必要な場合は、jQueryをお勧めします。コードは次のようになります。
setTimeout(function(){
$.post("results.php",function(result){
//Do somthing with the result Array or object
},"json");
},5000);
さらに、1つのデータ「ユーザー名」のみを取得しているため、オブジェクトjsonではなく配列jsonを返す必要があります
["matt","matt","peter","jim","sam"]
あなたとあなたのユーザーの両方にとって、より少ない帯域幅を必要とします。
注:results.phpからjqueryスクリプトを削除する必要があります。再調整する必要があるのは、json自体だけです。疑問がある場合は質問してください
答え :
解決策:
results.phpを使用して両方のことを実行する場合(つまり、ユーザー名を表示し、JSONクエリに応答する場合)、ファイルを2つのブランチに分割する必要があります。 _GET変数を使用して、どのブランチを指定します。したがって、たとえば、results.phpだけでなくresults.php?json=trueで.getJSONを実行します。これで、results.php内にこの_GET変数の存在をチェックするifブランチがあり、存在する場合は、必要なデータを取得して、jsonでエンコードされた文字列にエコーし、次にexit() 。 <script>
タグの前であっても、results.phpで他の何よりも前にこれらすべてを実行します。
コードを提供するために編集:(OPの質問から編集)
<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db_selected = mysql_select_db('test', $link);
if (!$db_selected) {
die ('Can\'t use test : ' . mysql_error());
}
$result = mysql_query("SELECT user_name FROM users");
if (!$result) {
die('Invalid query: ' . mysql_error());
}
$names = array();
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $key => $val) {
$names[][$key] = $val;
}
}
if (isset($_GET['json'])) {
echo json_encode($names);
exit();
}
?>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$.getJSON("http://localhost/test/results.php?json=true", function(json){
alert("JSON Data: " + json);
});
</script>
<div></div>
答え :
解決策:
setTimeoutを使用できます。
setTimeout( function() {
getData()
}, 5000);
function getData() {
$.getJSON("http://localhost/test/results.php", function(json){
alert("JSON Data: " + json);
});
});
}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。