私はJQueryにかなり慣れておらず、おそらく初心者にとっては少し難しいかもしれない何かを達成しようとしています。ただし、現在の値をPHPスクリプトに送信し、必要な値を返すオートコンプリートを作成しようとしています。
これが私のJavascriptコードです
$("#login_name").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://www.myhost.com/myscript.php",
dataType: "jsonp",
success: function(data) {
alert(data);
response($.map(data, function(item) {
return {
label: item.user_login_name,
value: item.user_id
}
}))
}
})
},
minLength: 2
});
そしてこれが「myscript.php」の後半です
while($row = $Database->fetch(MYSQLI_ASSOC))
{
foreach($row as $column=>$val)
{
$results[$i][$column] = $val;
}
$i++;
}
print json_encode($results);
次の出力が生成されます
[{"user_id":"2","user_login_name":"Name1"},{"user_id":"3","user_login_name":"Name2"},{"user_id":"4","user_login_name":"Name3"},{"user_id":"5","user_login_name":"Name4"},{"user_id":"6","user_login_name":"Name5"},{"user_id":"7","user_login_name":"Name6"}]
どこが間違っているのか誰か教えてもらえますか?かなりイライラし始めています。入力ボックスが「白」に変わり、オプションは表示されません。値の配列を指定すると、コードは機能します。
[〜#〜] update [〜#〜]コードをに変更しましたが、まだ運がありません。
$("#login_name").autocomplete({
source: "/ajax/login_name.php",
dataType: "json",
minLength: 2,
cache: false,
select: function(event, ui) {
alert(ui);
}
});
FireFoxのWeb開発ツールを使用すると、「bはnullです」というエラーが表示されます。
ついに私のニーズに合った解決策を見つけました
$("#login_name").autocomplete({
source: function(request, response){
$.post("/ajax/login_name.php", {data:request.term}, function(data){
response($.map(data, function(item) {
return {
label: item.user_login_name,
value: item.user_id
}
}))
}, "json");
},
minLength: 2,
dataType: "json",
cache: false,
focus: function(event, ui) {
return false;
},
select: function(event, ui) {
this.value = ui.item.label;
/* Do something with user_id */
return false;
}
});
いくつかの提案:
dataType= "jsop"
_? jsonpではないようです。 「json」が欲しいと思います。cache : false
_を挿入します。これにより、リクエストは常に行われ、ブラウザ側のキャッシュからは決して満たされません。alert()
があります。呼び出されますか?alert()
にブレークポイントを設定して、パラメーターの値を確認できます。他の誰かがそれを必要とする場合:
JQuery UIのオートコンプリートのドキュメントでは、使用するクエリ文字列パラメーターは「term」であり、「q」ではないと指定されています...または少なくとも現在はそうです。
E.g. http://www.myhost.com/myscript.php?term=someToSearchFor
はい、jsonのヘッダー情報が必要です
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-type: text/x-json");
そして tvanfosson プラグに隣接する良い点を作ります
いずれにせよ、プラグインがajax呼び出しを行うとは思わない。
実際に jquery-ui autocomple を使用している場合は、ドキュメントを読んで基本バージョンを実行する必要があります。ヘッダーデータがないことを除けば、PHPは問題ありません。
必要な人のためのシンプルなJqueryuiオートコンプリート。
//select data from the table
$search = $db->query('SELECT Title from torrents');
//then echo script tags and variables with php
<?php echo '<script type="text/javascript">
$(function() {
var availableTags = [';
foreach ($search as $k) {
echo '"'.$k['Title'].'",';
}
echo '];
$( "#tags" ).autocomplete({
minLength:2, //fires after typing two characters
source: availableTags
});
});
</script>';
?>
あなたのhtmlフォーム
<div id="search">
<form id="search-form">
<input id="tags" type="text" />
<input type="submit" value="Search" />
</form>
</div>
JSON構造はフラットな文字列ですが、 map は配列または配列のような構造を想定しています。マップを使用する前に、文字列でjsonデコードを試してください。
私もあなたのような問題を抱えていました。そして今、私はそれを修正します。問題は、サーバーから返されるjsonに構文エラーが含まれていることです。
In http://api.jquery.com/jQuery.getJSON/ は、JSONにエラーがあると、サイレントに失敗することを示しています。 JSONはここのJSON標準と一致する必要があります http://json.org/ 。
私のエラーは、JSONの文字列が1つの引用符で囲まれていることです。ただし、JSON標準では、二重引用符で囲む文字列のみが受け入れられます。
例えば。 「HelloWorld」ではなく「HelloWorld」
修正すると、ソースを文字列URLとして設定できます。用語は「term」クエリ文字列になります。そしてそれは動作します!!