2009-04-16 3 views
0

J'essaie d'utiliser la fonction jQuery.post() pour récupérer des données. Mais je n'obtiens aucune sortie.Impossible d'extraire des données à l'aide de jQuery.post

J'ai un code HTML qui affiche une table. Cliquer sur cette table devrait déclencher un événement jQuery.post.

Mon fichierscript ressemble à ceci:

jQuery(document).ready(function() { 

    jQuery('#storeListTable tr').click(function() { 
    var storeID = this.cells[0].innerHTML; //This gets me the rowID for the DB call. 

    jQuery.post("../functions.php", { storeID: "storeID" }, 
     function(data){ 
     alert(data.name); // To test if I get any output 
     }, "json"); 
    }); 
}); 

Mon fichier PHP ressemble à ceci:

<?php 
    inlcude_once('dal.php'); 

    //Get store data, and ouput it as JSON. 
    function getStoreInformation($storeID) 
    { 
    $storeID = "9";//$_GET["storeID"]; 
    $sl = new storeLocator(); 
    $result = $sl->getStoreData($storeID); 

    while ($row = mysql_fetch_assoc($result)) { 
    { 
     $arr[] = $row; 
    } 
    $storeData = json_encode($arr); 
    echo $storeData; //Output JSON data 
    } 
?> 

J'ai testé le fichier PHP, et il transmet les données au format JSON. Mon seul problème maintenant est de retourner ces données à mon javascript.

  1. étant donné que le javascript se trouve dans le répertoire/js /, est-il correct d'appeler le fichier php en utilisant '../'?
  2. Je ne pense pas que je passe correctement le paramètre storeID. Quelle est la bonne façon?
  3. Comment puis-je appeler la fonction getStoreInformation ($ storeID) et passer le paramètre? L'exemple jQuery sur jQuery.com a la ligne suivante: .post $ ("test.php", {func: "getNameAndTime"} Est-ce le getNameAndTime le nom de la fonction dans test.php

? .

J'ai obtenu un peu plus loin j'ai déplacé le code à l'intérieur de la fonction(), à l'extérieur Alors maintenant, le code php est exécuté lorsque le fichier est exécuté

Mon script js ressemble maintenant à ceci..:

jQuery('#storeListTable tr').click(function() { 
    var storeID = this.cells[0].innerHTML; 

    jQuery.post("get_storeData.php", { sID: storeID }, 
     function(data){ 
     alert(data); 
     }, "text"); 
    }); 

Il en résulte une fenêtre d'alerte qui fournit les données du magasin sous forme de chaîne au format JSON. (parce que j'ai changé "json" en "texte").

La chaîne JSON ressemble à ceci:

[{"id":"9","name":"Brandstad Byporten","street1":"Jernbanetorget","street2":null,"zipcode":"0154","city":"Oslo","phone":"23362011","fax":"22178889","www":"http:\/\/www.brandstad.no","email":"[email protected]","opening_hours":"Man-Fre 10-21, L","active":"pending"}] 

Maintenant, ce que je veux vraiment, est de ouput les données de JSON. Donc, je remplacerais "text" par "json" et "alert (data)" par "alert (data.name)". Alors maintenant, mon script js ressemblera à ceci:

jQuery('#storeListTable tr').click(function() { 
    var storeID = this.cells[0].innerHTML; 

    jQuery.post("get_storeData.php", { sID: storeID }, 
     function(data){ 
     alert(data.name); 
     }, "json"); 
    }); 

Malheureusement, la seule sortie que je reçois, est « non défini ». Et si je change "alert (data.name);" "alert (data);", la sortie est "[object Object]".

  1. Comment puis-je afficher le nom du magasin?

  2. Dans le fichier PHP, j'ai essayé de définir $ storeID = $ _GET ["sID"]; Mais je n'ai pas la valeur. Comment puis-je obtenir la valeur qui est passée en paramètre dans jQuery.post? (actuellement je hardcoded le storeID, pour le test)

Répondre

0

Ok, merci à Darryl, j'ai trouvé la réponse.

Voici donc le code fonctionnel pour tous ceux qui se demande à ce sujet:

fichier javascript

jQuery(document).ready(function() { 

    jQuery('#storeListTable tr').click(function() { 

    jQuery.post("get_storeData.php", { storeID: this.cells[0].innerHTML },  // this.cells[0].innerHTML is the content ofthe first cell in selected table row 
     function(data){ 
     alert(data[0].name); 
     }, "json"); 
    }); 

}); 

get_storeData.php

<?php 
    include_once('dal.php'); 

    $storeID = $_POST['storeID']; //Get storeID from jQuery.post parameter 

    $sl = new storeLocator(); 
    $result = $sl->getStoreData($storeID); //returns dataset from MySQL (SELECT * from MyTale) 

    while ($row = mysql_fetch_array($result)) 
    { 
    $data[] = array( 
    "id"=>($row['id']) , 
    "name"=>($row['name'])); 
    } 

    $storeData = json_encode($data); 

    echo $storeData; 
?> 

Merci pour votre aide les gars!

6

Perdez les guillemets "storeID":

Mauvais:

jQuery.post("../functions.php", { storeID: "storeID" }

droit:

jQuery.post("../functions.php", { storeID: storeID }

6

bartclaeys est correct. Comme c'est le cas maintenant, vous passez littéralement la chaîne "storeID" comme ID de magasin.

Cependant, deux autres notes:

  • Il peut sembler étrange que vous installerez storeID: storeID - pourquoi est seulement le deuxième en cours d'évaluation? Quand j'ai commencé, j'ai dû tripler chaque fois que je n'envoyais pas "1: 1" ou quelque chose comme ça. Cependant, les clés ne sont pas évaluées lorsque vous utilisez une notation d'objet comme celle-ci, donc seule la seconde sera la valeur réelle de la variable.
  • Non, il n'est pas correct que vous appeliez le fichier PHP en tant que ../ en pensant à l'emplacement du fichier JS. Vous devez l'appeler par rapport à n'importe quelle page a ce javascript chargé. Donc, si la page se trouve dans le même répertoire que le fichier PHP que vous appelez, vous pouvez corriger cela pour pointer vers le bon endroit.
  • Un peu de lié aux points précédents, vous vraiment voulez mettre la main sur Firebug. Cela vous permettra de voir les requêtes AJAX lorsqu'elles sont envoyées, si elles réussissent, quelles données leur sont envoyées et quelles données sont renvoyées. C'est, en un mot, l'outil de consensus par excellence pour déboguer votre application Javascript/AJAX, et vous devriez l'avoir, l'utiliser, et le chérir si vous ne voulez pas gaspiller 6 autres jours à déboguer une erreur idiote. :)

EDIT En ce qui concerne votre réponse, si vous cassez ce que vous retournez:

[ 
    { 
    "id":"9", 
    "name":"Brandstad Byporten", 
    "street1":"Jernbanetorget", 
    "street2":null, 
    "zipcode":"0154", 
    "city":"Oslo", 
    "phone":"23362011", 
    "fax":"22178889", 
    "www":"http:\\/www.brandstad.no", 
    "email":"[email protected]", 
    "opening_hours":"Man-Fre 10-21, L", 
    "active":"pending" 
    } 
] 

Ceci est en fait un tableau (les crochets) contenant un seul objet (Curly bretelles).

Ainsi, lorsque vous essayez de faire:

alert(data.name); 

Ce n'est pas correcte parce que l'objet réside, comme le premier élément du tableau.

alert(data[0].name); 

Doit fonctionner comme prévu.

+0

J'ai essayé d'utiliser Firebug. Mais ne comprends pas comment je peux déboguer javascripts :( – Steven

+0

Euh .. jamais vu. Trouvé Message: mon sID est undefined Réponse: Contient des informations de magasin en notation JSON – Steven

1

Votre JSON est retourné comme un tableau javascript ... avec [] enroulant les bits bouclés [{}]

si cela fonctionnerait.

wrong: alert(data.name); 
right: alert(data[0].name); 

Espérons que ça aide. D

+0

Aaaaaaah! Brilliant! – Steven

Questions connexes