tengo un error en JSON.parse(), tengo un archivo .php que contiene un método para recuperar datos de la base de datos y un archivo .js para la función de autocompletar, mi archivo .php devuelve datos como una cadena y necesito convertirlo en objeto usando JSON.parse().
este es mi archivo 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); ?>y este es mi archivo 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); } }); }); });No puedo eliminar el JSON.parse() porque lo necesito para convertir de cadena a objeto, espero que alguien pueda ayudarme a resolver esto y realmente lo aprecio.
El error está dentro del lado del servidor, cuando hay un error en el lado del servidor, la respuesta viene con las etiquetas html '<' cuando hay un error, php agregará la etiqueta con el mensaje de error. Por lo tanto, su json contiene las etiquetas html y deja de ser válido debido a etiquetas inesperadas.
El error está dentro de esta matriz.
$eventstArray[] = array ( 'label' => $eventsQuery2['eventTitle']; 'venue' => $eventsQuery2['venueName']; 'category' => $eventsQuery2['catDesc']; 'price' => $eventsQuery2['eventPrice']; 'description' => $eventsQuery2['eventDescription']; );debería ser
$eventstArray[] = array( 'label' => $eventsQuery2['eventTitle'], 'venue' => $eventsQuery2['venueName'], 'category' => $eventsQuery2['catDesc'], 'price' => $eventsQuery2['eventPrice'], 'description' => $eventsQuery2['eventDescription'] );(El origen del problema era el punto y coma (;) después del valor de la descripción. Debería estar solo al final de la matriz)
Ese error normalmente se ve cuando el valor dado a JSON.parse en realidad no está definido. Por lo tanto, verificaría el código que intenta analizar esto; lo más probable es que no esté analizando la cadena real que se muestra aquí.
Es un error del lado del servidor. Puede verificar el valor devuelto por el servidor (código php) usando las herramientas de desarrollo del navegador como Firefox y verificar el mensaje de respuesta.
Además, tal vez pueda eliminar JSON.parse() y agregar dataType: "json" dentro de la función ajax