web-dev-qa-db-fra.com

Uncaught SyntaxError: Jeton inattendu <dans JSON à l'emplacement: at JSON.parse (<anonymous>) dans Object. <Anonymous>

j'ai une erreur dans JSON.parse (), j'ai un fichier .php qui contient une méthode pour récupérer des données de la base de données et un fichier .js pour la fonction autoComplete, mon fichier .php renvoie des données sous forme de chaîne et je dois le convertir en objet JSON.parse ().

c'est mon fichier 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);
?>

et ceci est mon fichier 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);
                        }
                    });
                });
            });

je ne peux pas supprimer JSON.parse () parce que j'ai besoin de cela pour convertir une chaîne en objet, j'espère que quelqu'un pourra m'aider à résoudre ceci et j'apprécie vraiment cela.

5
richard houw

L'erreur est dans votre côté serveur, quand il y a une erreur sur votre côté serveur, la réponse vient avec les balises html '<' quand il y a une erreur php va ajouter une balise avec le message d'erreur. Par conséquent, votre json contient les balises HTML et devient invalide en raison de balises inattendues.

L'erreur est dans ce tableau

$eventstArray[] = array
        (
            'label'         => $eventsQuery2['eventTitle'];
            'venue'         => $eventsQuery2['venueName'];
            'category'      => $eventsQuery2['catDesc'];
            'price'         => $eventsQuery2['eventPrice'];
            'description'   => $eventsQuery2['eventDescription'];
        );

cA devrait etre 

$eventstArray[] = array(
            'label' => $eventsQuery2['eventTitle'],
            'venue' => $eventsQuery2['venueName'],
            'category' => $eventsQuery2['catDesc'],
            'price' => $eventsQuery2['eventPrice'],
            'description' => $eventsQuery2['eventDescription']
        );

(La source du problème était le point-virgule (;) après la valeur de description . Il devrait être uniquement à la fin du tableau)

2
Masivuye Cokile

Cette erreur est normalement visible lorsque la valeur donnée à JSON.parse est en réalité indéfinie. Donc, je vérifierais le code qui essaie d'analyser ceci - très probablement, vous n'analysez pas la chaîne réelle montrée ici.

0
anis programmer

C'est une erreur côté serveur. Vous pouvez vérifier la valeur renvoyée par le serveur (code php) en utilisant les outils de développement du navigateur tels que firefox et consulter le message de réponse.

En outre, vous pouvez peut-être supprimer JSON.parse () et ajouter dataType: "json" dans la fonction ajax

0
Asmin Jismun