Codeigniter - comment passer JSON en tant que paramètre à la vue
Je suis en train de construire un codeigniter/applications web php.
Je suis en train de passer d'un objet JSON à partir du contrôleur à la vue lorsque la vue est chargé, d'une manière qui sera accessible vers le javascript.
Le JSON se présente comme suit:
{
"event": {
"id": "1",
"name": "Some name",
"description": "Some description",
"address": "1 Main st."
},
"members": {
"others": [
{
"id": "26",
"name": "Brad Black"
},
{
"id": "27",
"name": "Bill Blue"
}
],
"current": {
"id": "1",
"name": "Jill White"
}
}
}
Le contrôleur de code se présente comme suit:
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => $some_data
);
$this->load->view('some_view',$data);
}
La vue (some_view) code se présente comme suit:
<script src="path/to/scripts/some_script.js" type="text/javascript"></script>
<script type="text/javascript">
some_data = "<?php echo $some_data?>";
</script>
<div class="main">
</div>
Le javascript (some_script) code se présente comme suit:
var some_data;
$(document).ready(function(){
some_data = $.parseJSON(some_data);
});
Le problème est que depuis l'objet JSON est envoyé comme une chaîne de caractères (après json_encode) il y a des caractères tels que { et citations comme partie de, qui le javascript n'aime pas quand je suis en l'assignant à un var (some_data = "";). J'ai essayé d'utiliser aussi mais il ne fonctionne pas aussi bien.
J'ai essayé de faire un tas de choses qui n'ont pas de travail, afin d'avancer, j'ai temporairement fini par remplacer le " dans le contrôleur
$data['some_data'] = str_replace('"', """, $some_data);
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => str_replace('"', """, $some_data);
);
$this->load->view('some_view',$data);
}
et de remplacer le "retour" à l'intérieur du javascript
some_data = some_data.replace(/"/g, '"');
var some_data;
$(document).ready(function(){
event_data = event_data.replace(/"/g, '"');
some_data = $.parseJSON(some_data);
});
C'est moche et je suis à la recherche d'une meilleure solution.
Tous les pointeurs seront grandement appréciés.
Mise à jour!
Problème résolu, ressemble guillemets supplémentaires ont été la rupture des choses.
La solution est en ligne avec mohan.gade réponse:
Contrôleur:
public function index()
{
$some_data = $this->Some_model->get_some_data();
$some_data = json_encode($some_data);
$data = array (
'some_data' => $some_data;
);
$this->load->view('some_view',$data);
}
Vue:
some_data = <?php echo $some_data?>;
</script>
OriginalL'auteur user898836 | 2012-12-05
Vous devez vous connecter pour publier un commentaire.
Votre JSON valeurs n'allais pas passer à la vue, essayer de corrigé de code suivant.
espère que cela va fonctionner!!
Votre code a bien fonctionné! Il semble que j'ai eu (pour certaines raisons) un supplément de guillemets autour de la <?php ?> tag... Marqué votre réponse comme correcte
OriginalL'auteur mohan.gade
Cela peut être fait en toute sécurité, sans beaucoup de code, à condition que vous avez un peu de raison dans votre modèle. Le JSON que vous avez posté, m'amène à croire que vous avez une base de données contenant des événements, et une manifestation existe ou qu'il n'a pas.
Si
$this->Some_model->get_some_data()
retourne typéFALSE
ouNULL
qui peut être vérifié avec l'opérateur d'égalité si aucun résultat n'existe pas, vous pouvez en toute sécurité exprimer ce votre JS dans la vue de la même manière que vous pourriez transmettre le JSON.E. g:
Puis, dans votre JS, il suffit de vérifier que la variable qui contiendra le raw chaîne JSON est en fait pas null avant de l'exploitation sur elle. Vous pourriez tout aussi bien le définir comme un entier, le point est de le rendre facile de les différencier.
Apparemment, si l'événement(s) existent réellement, vous aurez au moins avoir les données d'événement et la personne de la création en tant que membre. Vous devrez peut-être faire plus de vérifications que cela, je ne suis pas sûr de ce qui est dans votre modèle.
Assurez-vous que la variable PHP est développée dans un syntaxiquement correct sein de votre JS, ou peut-être choisir de modifier le JS entièrement si aucune donnée n'existe pour l'alimenter.
my_json = <?php echo $data['somedata'];?>; some_data = $.parseJSON(my_json); ne fonctionne pas?
Il a travaillé avec de légères modifications, le <?php echo $data['some_data'];?> à <?php echo $some_data;?> et je n'ai pas besoin d'utiliser le parseJSON. Merci encore!
OriginalL'auteur Tim Post
json_encode sera de retour
null
si variable vide, donc vous ne devez échapper"
en vous afficher le code. au lieu de cela, vous avez pour vérifier la variable de tableau ou objet de passer en vue de générer un code différent.Pour vous exemple:
Mis à jour pour vous cas
Non, il peut laid dans le fichier de vue, mais je pense que c'est facile à lire et à entretenir, et aussi une bonne poignée sur le javascript.
OriginalL'auteur Cauliturtle