web-dev-qa-db-ja.com

キャッチされていないSyntaxError:予期しないトークン<JSONの位置0:JSON.parse(<anonymous>)at Object。<anonymous>

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()を削除することはできません。文字列からオブジェクトに変換する必要があるため、誰かがこれを解決するのを手伝ってくれることを望み、本当に感謝しています。

7
richard houw

エラーはサーバー側で発生します。サーバー側でエラーが発生すると、エラーが発生するとレスポンスに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アレイ)

2
Masivuye Cokile

このエラーは通常、JSON.parseに指定された値が実際に未定義の場合に見られます。そのため、これを解析しようとしているコードをチェックします-おそらく、ここに示されている実際の文字列を解析していないでしょう。

0
anis programmer

JSONエンコードされた応答のみがスローバックされているかどうかを確認します。 phpスクリプトでvar dumpのようなことを行う場合は、javascript応答にも添付されるため、必ずコメント化してください

0

Phpコードは正しいが、返されたjson文字列を解析できない場合は、このオプションをオンにします。

同様の問題がありました。私が見つけたのは、私のPHPコードはUTF-8として保存されていましたが、No-BOMオプションはありませんでした。返されるjson文字列の先頭にこれらの余分な文字が含まれるファイル。

ここに私のPHPファイルの始まりがあります:ο"Ώ<?php include ...

preview of code in hex mode

0
Dimitrios

サーバー側のエラーです。 firefoxなどのブラウザーの開発者ツールを使用して、サーバーから返された値(phpコード)を確認し、応答メッセージを確認できます。

さらに、JSON.parse()を削除して、ajax関数内にdataType: "json"を追加できます。

0
Asmin Jismun