¿Cómo puedo completar una propiedad de objeto usando una respuesta de servidor codificada en JSON?

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

Pregunta

¿Cómo puedo convertir esto?

<? echo json_encode($myArrays); ?>

...dentro de esto:

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

Mi script devuelve ^, pero no sé cómo poner los datos en la cadena. _rowData ?PDEstoy usando Dashcode, intentando cargar elementos dinámicamente en un controlador de lista

Hasta ahora tengo esto:

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

rowData: recentListControllerXHR,
¿Fue útil?

Solución

Ok - su problema parece ser una falta de comprensión de cómo el trabajo API asíncrona. $.ajax() hace una petición, y en algún momento en el futuro llama a la devolución de llamada indicada con la respuesta.

Asumiendo que tiene un nombre para el objeto que se está poblando, puede rellenar la propiedad deseada usando algo como esto:

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

Tenga en cuenta que estoy usando jQuery soporte integrado para JSON aquí. Puede utilizar la biblioteca json.org lugar si lo desea, pero getJSON() es bastante conveniente si no tiene alguna necesidad inusual al analizar los datos.

Otros consejos

Prueba esto:

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

Pero tenga en cuenta que rowData no está disponible hasta que la función de devolución de llamada (véase el segundo parámetro de escala getJSON) ha sido llamado.

La pregunta es esencialmente ya ha sido contestada con cualquier otro método, pero, si usted está interesado en utilizar el método $.ajax en comparación con el método $.getJSON, esta es la forma en que lo haría lo siguiente:

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

Sólo otra opción, eso es todo ...

Su función devolverá los datos en una respuesta exitosa. Usted ha declarado la función de devolución de llamada:

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

Por lo tanto, los 'datos' contendrá los datos que se devuelven de la solicitud, si usted está declarando su tipo de contenido como texto / JSON (o application / json - No me acuerdo de la parte superior de mi cabeza) y  la prestación de su JSON como texto en la respuesta debe ser bueno.

Lo que es probable que desee hacer es tener su función de declarar la variable como rowData e ir de allí, así que hacer algo como:

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

Dudo que necesita el método stringify a menos que estés tratando de escribir los datos como texto.

Parece que no entienden cómo $.ajax obras (se parece a nadie no hace ).

$.ajax es una función asíncrona, lo que significa que no devuelve nada. Sólo se prepara una función que se invoca más tarde, cuando se ha recibido los datos.

El código debería ser más parecida a:

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top