データベースからデータを取得するメソッドを含む.phpファイルとオートコンプリート機能のための.jsファイルがあります。
これは私のphpファイルです。
<?php
include_once("database_conn.php");
function request($conn)
{
$eventstArray = array();
$events = "SELECT *
FROM te_events,te_category,te_venue
WHERE te_events.venueID = te_venue.venueID
AND te_events.catID = te_category_catID
ORDER BY 1
";
$eventsQuery1 = mysqli_query($conn,$events) or DIE (mysqli_error($conn));
while($eventsQuery2 = mysqli_fetch_array($eventsQuery1))
{
$eventstArray[] = array
(
'label' => $eventsQuery2['eventTitle'];
'venue' => $eventsQuery2['venueName'];
'category' => $eventsQuery2['catDesc'];
'price' => $eventsQuery2['eventPrice'];
'description' => $eventsQuery2['eventDescription'];
);
}
return json_encode($eventstArray);
}
echo request($conn);
?>
そして、これは私のautoComplete.jsファイルです。
$(document).ready(function()
{
'use strict';
$.ajax
({
method: "get",
url: "requestOffer.php"
})
.done(function(data)
{
var offers = JSON.parse(data);
// now we have the data attach the autocomplete
$('#EOffers').autocomplete
({
minLength:3,
source: offers,
select: function(event, ui)
{
$('#chosenEvent').text(ui.item.label);
$('#chosenEvent').text(ui.item.vanue);
}
});
});
});
JSON.parse()は文字列からオブジェクトに変換するために必要なので、削除できません。
サーバー側でエラーが発生した場合、レスポンスにはhtmlタグ '<' が付きますが、phpではエラーが発生するとエラーメッセージと共にが追加されます。そのため、jsonにはhtmlタグが含まれており、予期せぬタグのために無効となります。
エラーはこの配列の中にあります
$eventstArray[] = array
(
'label' => $eventsQuery2['eventTitle'];
'venue' => $eventsQuery2['venueName'];
'category' => $eventsQuery2['catDesc'];
'price' => $eventsQuery2['eventPrice'];
'description' => $eventsQuery2['eventDescription'];
);
弭
$eventstArray[] = array(
'label' => $eventsQuery2['eventTitle'],
'venue' => $eventsQuery2['venueName'],
'category' => $eventsQuery2['catDesc'],
'price' => $eventsQuery2['eventPrice'],
'description' => $eventsQuery2['eventDescription']
);
(問題の原因は、記述値の後にセミコロン(;)があることでした。 これは配列の末尾にのみあるべきものです)
phpコードが正しいが、返されたjson文字列を解析できない場合は、このオプションをオンにします。
私も同様の問題を抱えていました。 私が見つけたのは、PHPコードがUTF8として保存されていたが、BOMなしオプションがないことです。 これにより、3つの追加チャーが追加されました:ο» ⁇ (hex:EF BB BF)。 ファイルの先頭で、返されたjson文字列に最初にそれらの追加の文字が含まれるようにします。
これが私のphpファイルの始まりです。 ο» ⁇ <。 ?php include。..