web-dev-qa-db-fra.com

demande ajax jQuery avec réponse json, comment faire?

J'envoie une requête ajax avec 2 valeurs de publication, la première est "action" qui définit les actions que mon script php doit analyser, l'autre "id" qui est l'identifiant de l'utilisateur pour lequel il doit analyser le script.
Le serveur renvoie 6 valeurs dans un tableau () et est ensuite encodé en JSON avec le PHP function: json_encode();
Certaines de mes réponses sont en HTML, mais lorsque je l’encode en JSON, il échappe à "/" Et devient donc "\/".
comment désactiver cela?

aussi, quand je ne sais pas comment afficher cela dans jQuery quand j’obtiens la réponse du serveur, j’ai juste pensé que tout mettre dans un div afficherait simplement les nombres et les codes HTML que j’avais demandés, mais le tableau tel qu'il est encodé en PHP.

PHP

$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo json_encode($response);

jQuery:

$.ajax({
    type: "POST",
    dataType: "json",
    url: "main.php",
    data: "action=loadall&id=" + id,
    complete: function(data) {
        $('#main').html(data.responseText);
    }
});

comment puis-je faire cela pour travailler JSON?

32
Flaashing

Vous devez appeler le

$.parseJSON();

Par exemple:

...
success: function(data){
       var json = $.parseJSON(data); // create an object with the key of the array
       alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>";
    },
    error: function(data){
       var json = $.parseJSON(data);
       alert(json.error);
    } ...

voir ceci dans http://api.jquery.com/jQuery.parseJSON/

si vous avez toujours le problème des barres obliques: recherchez security.magicquotes.disabling.php ou: function.stripslashes.php

Remarque:

Cette réponse s’adresse ici à ceux qui essaient d’utiliser $.ajax Avec la propriété dataType définie sur json et même si le type de réponse est mauvais. Définir la header('Content-type: application/json'); sur le serveur peut résoudre le problème, mais si vous renvoyez text/html Ou tout autre type, la méthode $.ajax Doit le convertir en json. Je fais un test avec les anciennes versions de jQuery et seulement après la version 1.4.4 La force $.ajax Pour convertir tout type de contenu en dataType passée. Donc, si vous avez ce problème, essayez de mettre à jour votre version de jQuery.

47
Guilherme

Premièrement, cela vous aidera si vous définissez les en-têtes de votre PHP pour servir JSON:

header('Content-type: application/json');

Deuxièmement, cela vous aidera à ajuster votre appel ajax:

$.ajax({
    url: "main.php",
    type: "POST",
    dataType: "json",
    data: {"action": "loadall", "id": id},
    success: function(data){
        console.log(data);
    },
    error: function(error){
         console.log("Error:");
         console.log(error);
    }
});

En cas de succès, la réponse que vous recevez doit être capturée en tant que véritable JSON et un objet doit être consigné sur la console.

REMARQUE: Si vous souhaitez utiliser du code HTML pur, vous pouvez envisager d'utiliser une autre méthode pour JSON, mais je recommande personnellement d'utiliser JSON et de le rendre au format HTML à l'aide de modèles (tels que Handlebars js ).

27
sgb

Connectez votre contrôleur javascript clientside et votre contrôleur php serveride en utilisant l'envoi et la réception de codes opération avec des données liées. Donc, votre code php peut envoyer comme réponse delta fonctionnel pour le récepteur/auditeur js

voir https://github.com/ArtNazarov/LazyJs

Désolé pour mon mauvais anglais

2
ArtNazarov

Puisque vous créez un balisage en tant que chaîne, vous ne devez pas le convertir en json. Envoyez-le simplement car il combine tous les éléments du tableau en utilisant la méthode implode. Essaye ça.

Changement de PHP

$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo implode("", $response);//<-----Combine array items into single string

JS (Modifiez le type de données de json en html ou ne le définissez pas, jQuery le comprendra)

$.ajax({
   type: "POST", 
   dataType: "html", 
   url: "main.php", 
   data: "action=loadall&id=" + id,
   success: function(response){
      $('#main').html(response);
   }
});
1
ShankarSangoli