2015-07-13 4 views
4

J'ai une réponse JSON de mon fichier php comme:jQuery AJAX ne peut pas travailler avec la réponse JSON

[ 
    {"id":"1"}, 
    {"archiveitem":"<small>26.06.2015 12:25<\/small><br \/><span class=\"label label-default\">Bug<\/span> has been submitted by Admin"} 
] 

et essayer d'aller chercher cette réponse dans un div après bouton a été cliqué, mais Firebug me dit la message du gestionnaire d'erreurs. Je ne peux pas comprendre le problème?

$('#loadarchive').click(function(){ 
    $.ajax({ 
     type: 'post', 
     url: '/src/php/LoadAdminDashboardArchive.php', 
     dataType: 'json', 
     data: { 
      action : 'getArchive' 
     }, 
     success: function(results) { 
      var archiveelements = JSON.parse(results); 
      console.log(results); 
      $.each(archiveelements, function(){ 
       $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>'); 
      }); 
     }, 
     error: function(){ 
      console.log('Cannot retrieve data.'); 
     } 
    }); 
}); 
+0

Si le gestionnaire d'erreurs est atteint, cela signifie que la réponse du serveur n'est pas '200 OK'. Cela signifie qu'il y a une erreur dans votre emplacement 'responseURL'. En fait, si responseURL est une variable, vous devez supprimer les guillemets qui l'entourent. –

+0

Quel est le code d'état HTTP pour cette réponse? – kamituel

+0

Wow, c'était rapide :-) Je ne suis pas très familier avec firebug, mais il semble qu'il ne donne aucune réponse ... Le responseURL n'est pas une variable c'est juste /src/php/LoadAdminDashboardArchive.php – Quhalix89

Répondre

0

j'ai pu le faire fonctionner et que le problème était assez simple ...

J'ai oublié de coller le « bouton » - code source qui a initié la demande ajax. C'était une entrée de type "submit" et donc la page rechargée par défaut après que la réponse ait été récupérée avec succès ... donc e.preventDefault(); était le chemin à parcourir.

Merci à vous tous.

1

Vous pouvez obtenir plus d'informations à partir de la console si vous y plongez un peu plus. Ou en vous connectant ces deux paramètres:

error: function(xhr, mssg) { 
    console.log(xhr, mssg); 
} 
+0

Oh, je ne savais pas que ... il me donne: \t Objet {readyState = 0, status = 0, statusText = "erreur", mehr ...} erreur – Quhalix89

2

J'ai essayé d'exécuter votre code et je reçois

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data 

En définissant dataType: 'json' votre résultat est déjà analysé comme un tableau. Ainsi, vous pouvez faire quelque chose comme:

success: function (results) { 
    if (results["head"]["foo"] != 0) { 
     // do something 
    } else if (results["head"]["bar"] == 1) { 
     // do something 
    } 
} 

cela fonctionne sur mon ordinateur:

$.ajax({ 
    type: 'post', 
    url: '/src/php/LoadAdminDashboardArchive.php', 
    dataType: 'json', 
    data: { action : 'getArchive' }, 
    success: function(results) { 
     console.log(results); 
     $.each(results, function(){ 
      $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>'); 
     }); 
    }, 
    error: function(){ 
     console.log('Cannot retrieve data.'); 
    } 
}); 
+0

Quel outil vous donne cette "syntaxe" Erreur" ? Je ne vois pas cela dans firebug .. Même en utilisant votre code, j'obtiens: readyState \t 0 ResponseJSON état indéfini 0 statusText "erreur" – Quhalix89

+0

J'ai utilisé Firebug 2.0.11 pour déboguer et j'ai reçu ce message sur la console Firebug – Sergej

+0

probablement là est une erreur dans votre fichier '/src/php/LoadAdminDashboardArchive.php'-file, quelle réponse obtenez-vous lorsque vous appelez cette URL directement? – Sergej

1

Première votre réponse est incorrecte, la réponse correcte devrait ressembler à ceci

[{ 
    "id":"1", 
    "archiveitem":"<small>26.06.2015 12:25<\/small> 
<br \/><span class=\"labellabel-default\">Bug<\/span> has been submitted by Admin" 
}, 
{ 
    ... 
}] 

Deuxième Vous n'avez pas à analyser le résultat, c'est-à-dire. JSON.parse n'est pas nécessaire puisque dataType:'json' prendra probablement soin de json.

Enfin votre méthode de succès devrait ressembler à ceci:

success: function(results) { 
      $.each(results, function(ind,el){ 
       $('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + el.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + el.archiveitem + '</div>'); 
      }); 
     }, 
+0

Ok, Je suis d'accord que la réponse de JSON a été formatée incorrectement, je l'ai changé et il est maintenant: [{"id": "1", "archiveitem": " 26.06.2015 12:25 <\/small>
Bug <\/span> a été soumis par Admin"}] J'ai également changé la partie jquery, mais l'erreur est toujours la même ... – Quhalix89

+0

@ Quhalix89 utiliser l'onglet réseau dans les outils de développement et de vérifier si la demande renvoie correct réponse – reverbnation

+0

Lorsque vous utilisez l'onglet réseau dans les outils de développement firefox, il semble que cliquer sur le bouton envoie seulement un demande à la page actuelle au lieu de mon fichier php-json-response – Quhalix89

1

Comme vous dites message de gestionnaire d'erreur est affiché. Cela signifie que AJAX n'est jamais envoyé au serveur en raison d'une URL incorrecte ou pour toute autre raison.

Utilisez Firebug dans Firefox et voyez l'erreur dans l'onglet console.

Aussi je vois votre code

dataType: 'json', 
data: { action : 'getArchive' }, 
success: function(results) { 
    var archiveelements = JSON.parse(results); 
} 

Ne pas utiliser JSON.parse(results) parce que vous avez déjà écrit dataType: 'json', et tout type de réponse est analysé automatiquement.