Como posso preencher uma propriedade de objeto usando uma resposta do servidor codificada por JSON?

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

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,
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top