jSON.parse()にエラーがあります。データベースからデータを取得するメソッドを含む.phpファイルとautoComplete関数の.jsファイルがあります。私の.phpファイルはデータを文字列として返し、使用してオブジェクトに変換する必要がありますJSON.parse()。
これは私の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']
);
(問題の原因は、説明の値の後のセミコロン(;)でした。それは、endアレイ)
このエラーは通常、JSON.parseに指定された値が実際に未定義の場合に見られます。そのため、これを解析しようとしているコードをチェックします-おそらく、ここに示されている実際の文字列を解析していないでしょう。
JSONエンコードされた応答のみがスローバックされているかどうかを確認します。 phpスクリプトでvar dumpのようなことを行う場合は、javascript応答にも添付されるため、必ずコメント化してください
Phpコードは正しいが、返されたjson文字列を解析できない場合は、このオプションをオンにします。
同様の問題がありました。私が見つけたのは、私のPHPコードはUTF-8として保存されていましたが、No-BOMオプションはありませんでした。返されるjson文字列の先頭にこれらの余分な文字が含まれるファイル。
ここに私のPHPファイルの始まりがあります:ο"Ώ<?php include ...
サーバー側のエラーです。 firefoxなどのブラウザーの開発者ツールを使用して、サーバーから返された値(phpコード)を確認し、応答メッセージを確認できます。
さらに、JSON.parse()を削除して、ajax関数内にdataType: "json"を追加できます。