Come potrei compilare proprietà di un oggetto utilizzando una risposta del server JSON-codificato?
-
21-09-2019 - |
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,
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