Come potrei compilare proprietà di un oggetto utilizzando una risposta del server JSON-codificato?

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

Domanda

Come posso trasformare questo:

<? echo json_encode($myArrays); ?>

... in questo modo:

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

Il mio script restituisce tale ^, ma non so come mettere i dati nella stringa, _rowData? Post scriptum Sto usando Dashcode, cercando di caricare dinamicamente elementi in un controller List

Finora, ho questo:

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

rowData: recentListControllerXHR,
È stato utile?

Soluzione

Ok - il problema sembra essere un malinteso di come API asincroni funzionano. $.ajax() fa una richiesta, e ad un certo punto in futuro chiama la richiamata fornito con la risposta.

Supponendo di avere un nome per l'oggetto si sta popolando, è possibile compilare la proprietà desiderata utilizzando qualcosa di simile a questo:

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.
  });

Si noti che sto usando jQuery supporto incorporato per JSON qui. È possibile utilizzare la libreria json.org invece se lo si desidera, ma getJSON() è piuttosto conveniente se non avete esigenze particolari durante l'analisi dei dati.

Altri suggerimenti

Prova questo:

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

Ma si noti che rowData non è disponibile fino a quando la funzione di callback (vedi secondo parametro della chiamata getJSON) è stato chiamato.

La domanda è in sostanza già stata risolta utilizzando un altro metodo, ma, se siete interessati ad utilizzare il metodo $.ajax in contrasto con il metodo $.getJSON, questo è come l'hai fatto:

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; 
    }
});

Solo un'altra opzione, che è tutto ...

La funzione restituirà i dati su una risposta positiva. Hai dichiarato la funzione di callback:

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

Quindi, 'data' conterrà tutti i dati che è stato restituito dalla richiesta, se si sta dichiarando il tipo di contenuto come text / JSON (o application / json - Non mi ricordo fuori dalla parte superiore della mia testa) e  rendendo il vostro JSON come testo la risposta che dovrebbe essere buona.

Quello che probabilmente vuole fare è avere la vostra funzione dichiarare la variabile come rowData e passare da lì, in modo da fare qualcosa di simile:

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

Dubito che è necessario il metodo stringa i meno che non si sta cercando di scrivere i dati come testo.

Sembra che non si capisce come $.ajax opere (assomiglia a nessuno fanno ).

$.ajax è una funzione asincrona, il che significa che non restituisce nulla. Si prepara solo una funzione da richiamare più tardi, quando è stato ricevuto i dati.

Il codice dovrebbe essere più simile a quello:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top