php/mysql バックエンドとブートストラップ/jQ フロントエンドがあります。そして4時間の頭痛。
フォーム要素は次のようになります。
<input id="location_name" name="location_name" data-provide="typeahead"
autocomplete="off" type="text" placeholder="Location name"
class="input-xlarge" required="yes" value="" />
jQuery は次のようになります。
$(document).ready(function(){
$('#location_name').typeahead({
'source': function (query,typeahead) {
var id = $("#area_id option:selected").attr('value');
return $.get(
'/app/event/location_name_typehead.php',
{ 'location_name': encodeURIComponent(query), 'area_id' : id },
function (data) { return data; }
);
},
'items': 4,
'minLength': 2
});
});
PHP は次のようになります。
<?php
header('Content-type: text/json');
$location_name = $_REQUEST['location_name'];
$area_id = $_REQUEST['area_id'];
//print_r($_REQUEST);
// ... PDO setup ...
$locations = $location_recs->fetchAll(PDO::FETCH_ASSOC);
if(count($locations) == 0) {
echo '[]';
} else {
foreach ($locations as $location) {
$names[] = $location['location_name'];
}
echo '[ "'.implode('", "', $names).'" ]';
};
?>
私は戻り値の型として「application/json」と「text/json」の両方を試しtypeahead.process(data)
、データのjQuery jsonデコードのバリエーションを使用して、気の毒なことを機能させました。検索結果が返されています。つまり、フィールドに入力すると ajax 呼び出しがトリガーされ、返されたドキュメントは正しいように見えます。
[ "Administration Block", "Science Block" ]
それを止めている明らかに明白な(私が推測する)構文の問題を誰かが指摘できますか?