Comment pourrais-je remplir une propriété d'objet à l'aide d'une réponse du serveur encodé JSON-?

StackOverflow https://stackoverflow.com/questions/1970630

Question

Comment puis-je tourner ceci:

<? echo json_encode($myArrays); ?>

... dans ceci:

_rowData: [
    { name: "Most Recent", view: "recentView" }, 
    { name: "Most Popular", view: "popularView" }, 
    { name: "Staff Picks", view: "staffView" }
],

Mon script retourne que ^, mais je ne sais pas comment mettre les données dans la chaîne, _rowData? Post-scriptum J'utilise Dashcode, en essayant de charger dynamiquement des éléments dans une liste des contrôleurs

Jusqu'à présent, j'ai ceci:

var recentListControllerXHR = $.ajax("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", function(data){
                            return(JSON.stringify(data));
                          }, 'text');

rowData: recentListControllerXHR,
Était-ce utile?

La solution

Ok - votre problème semble être une mauvaise compréhension de la façon dont fonctionnent les API asynchrones. $.ajax() fait une demande, et à un moment donné dans l'avenir appelle le rappel fourni avec la réponse.

En supposant que vous avez un nom pour l'objet que vous peuplant, vous pouvez remplir la propriété désirée à l'aide quelque chose comme ceci:

var someObject = {
  ...
  rowData: null,
  ...
};

// at this point, someObject is incomplete...

$.getJSON("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", 
  function(data)
  {
    // called whenever the server gets around to sending back the data
    someObject.rowData = data;
    // at this point, someObject is complete.
  });

Notez que j'utilise un support intégré de jQuery pour JSON ici. Vous pouvez utiliser la bibliothèque json.org au lieu si vous le souhaitez, mais getJSON() est plutôt pratique si vous n'avez des besoins inhabituels lors de l'analyse des données.

Autres conseils

Essayez ceci:

var rowData;
$.getJSON("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", function(data) {
    rowData = data;
});

Mais notez que rowData n'est pas disponible jusqu'à ce que la fonction de rappel (voir deuxième paramètre d'appel getJSON) a été appelé.

La question est essentiellement déjà répondu en utilisant une autre méthode, mais, si vous êtes intéressé à utiliser la méthode $.ajax par opposition à la méthode $.getJSON, voici comment vous le faire:

var rowData;
$.ajax({
    url: "http://tarnfeldweb.com/applewebapps/ajax/recentApps.php",
    type: 'get',
    dataType: 'json' // could also be 'jsonp' if the call is going to another site...
    success: function(data){
        rowData = data; 
    }
});

Juste une autre option, qui est tout ...

Votre fonction renvoie les données sur une réponse positive. Vous avez déclaré la fonction de rappel:

function(data){
                        return(JSON.stringify(data));
                      }

Alors, « données » contiendra toutes les données qui a été renvoyée de la demande, si vous déclarer votre type de contenu sous forme de texte / JSON (ou application / JSON - Je ne me souviens pas du haut de ma tête) et  le rendu de votre JSON sous forme de texte dans la réponse que vous devrait être bon.

Qu'est-ce que vous voulez sans doute faire est d'avoir votre fonction déclarer la variable comme rowData et à partir de là, donc faire quelque chose comme:

function(rowData){
           // do something with the rowdata
                          }

Je doute que vous avez besoin de la méthode stringify à moins que vous essayez d'écrire les données sous forme de texte.

On dirait que vous ne comprenez pas comment fonctionne $.ajax (qui ressemble à personne ne ).

$.ajax est une fonction asynchrone, ce qui signifie qu'il ne retourne rien. Il prépare uniquement une fonction à invoquer plus tard, lorsque les données ont été reçues.

Votre code devrait ressembler plus que:

var obj = {
 ...
 _rowData: [],
 ...
};

$.getJSON("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", function(data)
{
    // Now data contains your row data, 

    // you can either fill the global object
    obj._rowData = data;
    doSomethingWith(obj);

    // or use data directly
    doSomethingWith({
        ...
        _rowData: data
        ...
    });  
});

// Note that code below will be executed before the AJAX data is received
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top