Como posso preencher uma propriedade de objeto usando uma resposta do servidor codificada por JSON?
-
21-09-2019 - |
Pergunta
Como posso virar isso:
<? echo json_encode($myArrays); ?>
...nisso:
_rowData: [
{ name: "Most Recent", view: "recentView" },
{ name: "Most Popular", view: "popularView" },
{ name: "Staff Picks", view: "staffView" }
],
Meu script retorna isso ^, mas eu não sei como colocar os dados na string, _rowData
? PS Estou usando o DashCode, tentando carregar itens dinamicamente em um controlador de lista
Até agora, eu tenho isso:
var recentListControllerXHR = $.ajax("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", function(data){
return(JSON.stringify(data));
}, 'text');
rowData: recentListControllerXHR,
Solução
OK - seu problema parece ser um mal -entendido de como as APIs assíncronas funcionam. $.ajax()
faz um pedido, e em algum momento no futuro chama o retorno de chamada fornecido com a resposta.
Supondo que você tenha um nome para o objeto que está preenchendo, você pode preencher a propriedade desejada usando algo assim:
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.
});
Observe que estou usando o suporte interno da JQuery para o JSON aqui. Você pode usar a biblioteca json.org, se desejar, mas getJSON()
é bastante conveniente se você não tiver nenhuma necessidade incomum ao analisar os dados.
Outras dicas
Experimente isso:
var rowData;
$.getJSON("http://tarnfeldweb.com/applewebapps/ajax/recentApps.php", function(data) {
rowData = data;
});
Mas observe isso rowData
não está disponível até a função de retorno de chamada (consulte o segundo parâmetro de getJSON
chamada) foi chamado.
A pergunta já foi respondida usando outro método, mas se você estiver interessado em usar o $.ajax
método em oposição ao $.getJSON
Método, é assim que você faria isso:
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;
}
});
Apenas mais uma opção, tudo isso ...
Sua função retornará os dados sobre uma resposta bem -sucedida. Você declarou a função de retorno de chamada:
function(data){
return(JSON.stringify(data));
}
Portanto, 'Data' conterá quaisquer dados que foram retornados da solicitação, se você estiver declarando seu tipo de conteúdo como texto/json (ou aplicativo/json - não me lembro do topo da minha cabeça) e renderizando seu json Como texto na resposta, você deve ser bom.
O que você provavelmente quer fazer é que sua função declare a variável como rowdata e vá a partir daí, então faça algo como:
function(rowData){
// do something with the rowdata
}
Duvido que você precise do método Stringify, a menos que esteja tentando escrever os dados como texto.
Parece que você não entende como $.ajax
Trabalha (parece que ninguém faz).
$.ajax
é uma função assíncrona, o que significa que não retorna nada. Ele apenas prepara uma função a ser invocada posteriormente, quando os dados foram recebidos.
Seu código deve parecer mais assim:
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