web-dev-qa-db-fra.com

Comment passer un tableau en utilisant PHP Et Ajax à Javascript?

Toutes mes excuses si cette explication n'est pas claire, il m'est difficile de comprendre aussi. Comment utiliser PHP & Ajax pour envoyer un tableau en Javascript? J'utilise Ajax pour obtenir un tableau de photos, que je cherche ensuite à ajouter à un <div> vide sur ma page.

Le jQuery ressemble à ceci:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    success: function(data) {
        alert(data);
   }

Et la fonction PHP getPhotos ressemble à ceci:

<?php

$photos = array();

foreach ($data as $photo) {
    array_Push($photos,$photo['source']);
    }

// echo json_encode($photos); How should I be returning $photos?

Si je simplement echo $photos;, les données sont envoyées au rappel de réussite, mais elles ne semblent pas être dans un format utilisable.

Si je fais un var_dump($photos) en PHP, le résultat ressemble à quelque chose comme:

array(4) {
  [0]=>
  string(14) "some_image.jpg"
  [1]=>
  string(14) "some_image.jpg"
  [2]=>
  string(14) "some_image.jpg"
  [3]=>
  string(14) "some_image.jpg"
}

J'ai essayé diverses combinaisons de json_encode et similaires, mais je devine et je ne suis pas sûr de la théorie derrière tout cela. Quel est le meilleur moyen de transmettre des données de PHP à Javascript dans ce contexte?

14
Joe W

Essayer:

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType:"json",
    success: function(data) {
        alert(data[0]);
   }

Du côté PHP, vous voudrez imprimer:

print json_encode($photos);

Une autre chose que vous pourriez essayer afin de mieux encapsuler votre code, et à titre d’exemple de plus en plus JSON, serait:

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!"));

Ensuite, sur le serveur, vous y accédez avec:

data.photolist[0]; //First photo
data.photo_owner;  //The owner of the photo set
23
Richard

J'ai créé un tableau $result dans PHP et à la fin de la requête.

 echo json_encode($result); 

et dans la fonction de gestionnaire JS $.post

var obj = $.parseJSON(data);
var v = data.k; 

k est la valeur de la clé dans un tableau associatif.

10
bboydev

json_encode est définitivement la voie à suivre. jQuery a même un support intégré pour l'analyse JSON. Vous pouvez utiliser par exemple.

$.ajax({
    url: "<?php echo site_url('demo/getPhotos/'); ?>",
    type: 'POST',
    data: form_data,
    dataType: 'json', // will automatically convert array to JavaScript
    success: function(array) {
        alert(array[0]); // alerts first string
    }
});
2
pimvdb

json_encode rulez quand vous avez besoin de ça.

J'ai récemment appris cette chose cool aussi! Voici comment vous le faites:

function jsonResponse($array) {
     header('Content-type: application/json; charset=utf-8;');
     die(json_encode($array));
}

Ceci est facultatif, si vous voulez le faire, vous n’avez pas à le faire, mais dans mon système MVC, j’ai tendance à écrire de cette façon ... Donc d’abord, je fais une requête ajax (prototype), à ​​un script, puis appelle cette fonction jsonResponse dont j'ai parlé plus tôt ...

    new Ajax.Request('URL',
{
    method:'post',
    onSuccess: function(transport){
        res = transport.responseJSON;
        $('actionInformation').update(res.username);
    },
    onFailure: function(){
        alert('Something went wrong...')
    }
});

C’est le code jscript, remarquez le res.msg, c’est là que nous pouvons opérer avec array. Mais assurez-vous d’envoyer une réponse au format JSON dans votre PHP, à l’aide de la fonction jsonResponse, elle est facile à utiliser. Par exemple, votre fonction php peut ressembler à ceci:

function ajax_get_user() {
     $userName = 'Adrian';
     $active = 1;
     jsonResponse(array('username' => $username, 'active' = $active));
}

Plus tard, vous pourrez le récupérer facilement, res.username, res.active.

Je pense que cela devrait le faire!

0
Adrian

retourne le json lui-même puis construit le tableau en js en bouclant sur le json comme suit:

var array=[];
for(var key in json)
{    
    if(json.hasOwnProperty(key))
      array.Push(json[key]);
}

Ou vous pouvez simplement travailler avec le JSON lui-même pour une raison quelconque d'avoir besoin du tableau? 

quelque chose comme json [0] ou json [1] etc.

0
Baz1nga