web-dev-qa-db-fra.com

Comment obtenir une réponse jSON dans une variable à partir d'un script jQuery

J'ai des problèmes avec mon script jQuery ci-dessous, ceci est une version simplifiée de base et même cela ne fonctionnera pas, j'ai le fichier php que le script jQuery appelle, je l'ai configuré pour encoder et afficher une réponse json 

Ensuite, dans le script jQuery, il doit lire la valeur et y répondre, mais la réponse n’est pas obtenue. 

Est-ce que json.response est une mauvaise façon d'appeler une variable dans la chaîne json qui est name réponse?

Quelqu'un peut aider s'il vous plaît je suis coincé

<?PHP
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

// set to retunr response=error
$arr = array ('resonse'=>'error','comment'=>'test comment here');
echo json_encode($arr);
?>

//the script above returns this:
{"response":"error","comment":"test comment here"}

<script type="text/javascript">
$.ajax({
    type: "POST",
    url: "process.php",
    data: dataString,
    dataType: "json",
    success: function (data) {
        if (json.response == 'captcha') {
            alert('captcha');
        } else if (json.response == 'error') {
            alert('sorry there was an error');
        } else if (json.response == 'success') {
            alert('sucess');

        };
    }

})
</script>

METTRE À JOUR;

J'ai changé
json.response 

dans 

data.response 

Mais cela ne le rend pas ork non plus

20
JasonDavis

Voici le script, réécrit pour utiliser les suggestions ci-dessus et une modification de votre méthode sans cache.

<?php
// Simpler way of making sure all no-cache headers get sent
// and understood by all browsers, including IE.
session_cache_limiter('nocache');
header('Expires: ' . gmdate('r', 0));

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

// set to return response=error
$arr = array ('response'=>'error','comment'=>'test comment here');
echo json_encode($arr);
?>

//the script above returns this:
{"response":"error","comment":"test comment here"}

<script type="text/javascript">
$.ajax({
    type: "POST",
    url: "process.php",
    data: dataString,
    dataType: "json",
    success: function (data) {
        if (data.response == 'captcha') {
            alert('captcha');
        } else if (data.response == 'success') {
            alert('success');
        } else {
            alert('sorry there was an error');
        }
    }

}); // Semi-colons after all declarations, IE is picky on these things.
</script>

Le problème principal ici était que vous aviez renvoyé une faute de frappe dans le code JSON ("resonse" au lieu de "réponse". Cela signifiait que vous recherchiez la mauvaise propriété dans le code JavaScript. Une manière de résoudre ces problèmes à l'avenir est à console.log la valeur de data et assurez-vous que la propriété que vous recherchez existe.

Apprendre à utiliser les outils du débogueur Chrome (ou des outils similaires dans Firefox/Safari/Opera/etc.) sera également inestimable.

28
Nathan Kleyn

Vous devez utiliser data.response dans votre JS au lieu de json.response.

5
RaYell

Votre tableau PHP est défini comme suit:

$arr = array ('resonse'=>'error','comment'=>'test comment here');

Notez la mauvaise prononciation "resonse". De plus, comme l'a mentionné RaYell, vous devez utiliser data au lieu de json dans votre fonction success car son paramètre est actuellement data.

Essayez d’éditer votre fichier PHP pour changer la forme orthographique resonse en response. Cela devrait fonctionner alors.

4
John Rasch

Cherchez ce pitfal: http://www.vertstudios.com/blog/avoiding-ajax-newline-pitfall/

J'ai cherché plusieurs heures avant de constater qu'il y avait des sauts de ligne dans les fichiers inclus.

0
Sven