2012-04-06 2 views
1

J'ai ce script jQueryjQuery JSON à partir du résultat PHP

var dataString = "class_id="+class_id; 

$.ajax({ 
    type: "POST", 
    url: "page.php", 
    data: dataString, 
    success: function (msg) { 
     //stuck here 
    }, 
    error: function() { 
     showNotification("error", "Could not process at this time, try again later."); //this is a function created by me (which works fine so I just left the code in here) 
    } 
}); 

ma sortie de PHP est quelque chose comme ça

echo '{status:1,message:"Success"}'; 

ou

echo '{status:0,message:"Failure"}'; 

ce que je suis en train de faire dans jQuery success: function(...) partie est de vérifier si le statut est 0 ou 1, puis afficher le message.

J'ai essayé de faire est

success: function(text) { 
    if(parseInt(text.status) == 1) { 
     alert(text.message); // this is the success, the status is 1 
    } else { 
     alert(text.message); // this is the failure since the status is not 1 
    } 
} 

qui ne fonctionne pas, il n'a été outputing l'instruction else, même si le statut était 1

+0

Quel est votre problème? –

+0

Désolé, j'ai oublié de poster à ce sujet, je vais le modifier avec cette info. – Grigor

Répondre

1

Essayez quelque chose comme ci-dessous,

$.ajax({ 
    type: "POST", 
    url: "page.php", 
    data: dataString, 
    dataType: 'json', 
    success: function (msg) { 
     if (msg.status == 0) { 
      alert("Success " + msg.message); 
     } else if (msg.status == 1) { 
      alert("Error " + msg.message); 
     } 
    }, 
    error: function() { 
     showNotification("error", "Could not process at this time, try again later."); //this is a function created by me (which works fine so I just left the code in here) 
    } 
}); 
+0

qui l'a résolu, merci! – Grigor

3

Votre PHP génère un JSON invalide, et ne montre aucun signe de définition d'un en-tête de type de contenu approprié pour indiquer au navigateur de le traiter comme JSON en premier lieu. Alors d'abord, fixer le PHP:

header('application/json'); 
echo json_encode(Array("status" => 1, "message" => "Success")); 

Puis:

success: function (msg) { 
    alert(msg.message) 
}, 
+0

le problème n'était pas spécifié dataType – Grigor

+0

@Grigor - 'dataType' est comment vous dites à jQuery d'ignorer l'en-tête de type de contenu du serveur et de traiter les données comme quelque chose d'autre. Définir le bon type de contenu est la meilleure option. – Quentin

+0

J'ai essayé de définir le type de contenu, mais cela ne fonctionnerait pas encore, et lorsque j'ai défini le type de données, cela a fonctionné correctement. – Grigor

2

Vous pouvez également utiliser

PHP

echo json_encode(Array("status" => 1, "message" => "Success")); 

JS

l'intérieur de votre rappel utilisez la fonction

success: function (msg) { 
    $.parseJSON(msg); 
    alert(msg.message); 
} 

Le parseJSON convertit la chaîne JSON retournée/reprise par PHP pour objet JSON.

1

Si vous ne spécifiez pas dans $ .ajax, les données de type 'json' passées au gestionnaire de réponse sont traitées comme des chaînes. Alors que si vous spécifiez le paramètre dataType « JSON » vous pouvez utiliser:

msg.status 

et

msg.message 

Comme un soupçon je suggère en php pour utiliser la fonction json_encode pour générer JSON.

Questions connexes