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?
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
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;
où k
est la valeur de la clé dans un tableau associatif.
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
}
});
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!
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.