2010-11-21 6 views
3

ok, je suppose que j'ai besoin d'aide! J'ai cherché avec chaque mot-clé que je pouvais penser, mais je n'arrive toujours pas à comprendre, s'il vous plaît aider. Suis plus d'un gars php, et je viens de commencer avec jQuery. Fondamentalement, ce que j'essaye de faire est d'envoyer un message de jQuery d'une fonction de clic. Et en fonction de ce qui est retourné par ma fonction php, afficher/masquer 2 divs. Ma fonction php retourne un tableau "de json_encode" avec 2 valeurs simples, comme par exemple:Envoyer un tableau PHP json_encode à jQuery

// ================== code PHP ======= ===========================

$message_for_user = "blah blah"; 
$calculatedValue = 1230; 
$responseVar = array(
        'message'=>$message_for_user, 
        'calculatedValue'=>$calculatedValue 
        ); 
echo (json_encode($responseVar)); 

// ============== ==== Code PHP End ===============================

Mon code javascript est supposé d'accepter les valeurs renvoyées par php:

// ================== code Javascript ================ ==================

$("div.calculator_result").click(function() 
{ 
    $.post('myCalculator.php' ,{qid:itemID},function(response) 
    { 
     $("div.calculation_value").show(500).html(response['calculatedValue']); 
     $("div#message_for_user").show(500).html(response['message']); 
    } 
} 

// ================== code Javascript fin ====================== ============

Malheureusement, sur le côté javascript de mon projet, les divs ne sont pas mis à jour avec les valeurs renvoyées par mes fonctions php .... où je me trompe? J'espère avoir été clair dans ma question, sinon, faites le moi savoir, et je fournirai toutes les informations supplémentaires requises. Une autre chose est que précédemment, je ne faisais qu'échouer une seule valeur, c'est-à-dire la valeur calculée (echo $ calculateValue), et tout a bien fonctionné, c'est seulement après avoir changé d'écho dans le tableau de codage json les choses ne fonctionnent pas

Répondre

18
var json = $.parseJSON(response); alert(json.message); 
+0

En fonction de votre réponse, voici ce que j'ai essayé: var resp_object = $ .parseJSON (response); $ ("div.calculation_value"). html (resp_object.calculatedValue); Malheureusement, ce travail fonctionne pour moi, mec. Je suis sur php ver 5.2.14, si cela aide – SIndhu

+0

alrite, cela fonctionne. Pour une raison tordue, j'avais une version de jquery qui était plus ancienne que 1.4.1, et il semble que jQuery.parseJSON a été ajouté seulement dans 1.4.1 – SIndhu

2

Essayez le réglage de l'option dataType:

$.post('myCalculator.php' ,{qid:itemID},function(response) 
{ 
    $("div.calculation_value").show(500).html(response['calculatedValue']); 
    $("div#message_for_user").show(500).html(response['message']); 
}, 'json'); 

NB J'ai également ajouté les crochets de fermeture ) où vous les avez manqués.

1

Vous devez analyser la réponse JSON. jQuery a cette fonctionnalité intégrée (heureusement, car sinon IE6 et 7 ne supportent pas nativement JSON). Définir une variable égale à ceci:

$.parseJSON(response) 

Et puis, si vous n'êtes pas familier avec le format JSON, vérifiez les en-têtes de réponse (en utilisant Firebug ou similaire), et qui vous aidera à choisir qui les valeurs clés que vous voulez . Si vous êtes en boucle, je regarderais for in statements une fois que la réponse a été analysée.

EDIT: En utilisant $.getJSON, l'analyse est effectuée automatiquement. Écris moins, fais plus. :)

+0

ce dont il a besoin est POST – Kemo

0

Tout ce que vous devez faire, c'est de dire à l'appel Ajax que vous recevez le type de données "json". En d'autres termes ...

$.ajax({ 
    url: "external_file", 
    method:"post", 
    dataType: "json", // **************** Note dataType**************** 
    success:function(response){ 
     console.log(response) 
     // Response will be a javascript array, instead of a string. 
    }, 
    error: function(){ 
     alert('something went wrong.') 
    } 
})