JSON.parse: caractère inattendu

J'essaie de passer un json de php jquery, après avoir mis en place une requête sql et obtenir l'erreur de javascript suivante.

JSON.parse: unexpected character 

La fonction à renvoyer résultat de sql:

 public function selectassocSql($sql){ $i = 0; $resSelect = array(); mysql_query("SET NAMES 'utf8'"); $result = mysql_query($sql); while ( $row = mysql_fetch_assoc($result) ) { $resSelect[$i] = $row; $i++; } mysql_free_result($result); return $resSelect; } 

Après avoir utilisé cette fonction de cette manière,

 $sql = "SELECT id, code, name FROM table WHERE code LIKE '%$codcli%' "; $v = $data->selectassocSql($sql); echo json_encode($v, JSON_FORCE_OBJECT); 

Et le code javascript est le suivant:

 $('#formclientes').submit(function(e){ e.preventDefault(); $.ajax({ type: 'POST', url:$(this).attr('action'), data:$(this).serialize(), success:function(data) { //console.log("SUCCESS " + data); var json_cli = $.parseJSON(data); } }) }) 

Comment puis-je corriger cette erreur et comment je peux lire un json de jquery?

Vous n'avez pas besoin de l'appel $.parseJSON puisque jQuery le fait automatiquement car si vous ne spécifiez pas une propriété dataType , jQuery essaie de l'admettre et appelle la fonction correcte pour analyser la réponse avant que les données ne soient traitées à la fonction de réussite

  $.ajax({ type: 'POST', url:$(this).attr('action'), data:$(this).serialize(), success:function(data) { //console.log("SUCCESS " + data); var json_cli = data; } }) 

Vérifiez également cette question Pourquoi 'jQuery.parseJSON' n'est-il pas nécessaire?

Je viens de rencontrer cela dans FF10.0.2 avec des données qui ressemblaient à:

 [ { "firstName": 'Joe', "lastName": 'Smith' } ] 

(Avec plusieurs objets dans le tableau – raccourci pour plus de clarté)

Il a effectivement analysé OK en utilisant eval, au lieu de JSON.parse. (Je n'utilise pas jQuery ici.)

Le problème s'est éloigné lorsque j'ai changé «pour» pour les valeurs:

 [ { "firstName": "Joe", "lastName": "Smith" } ] 

Je pensais que l'exigence était uniquement pour les noms de propriétés, pas les valeurs de données.