2010-03-14 7 views
5

No tengo problemas para hacer que el Json funcione y analizar el retorno de json. Me preguntaba cómo podría construir una dinámica "sea cual sea la información" y pegarla en [datos] para pasar mis parámetros desde allí y no agregarlos manualmente a la url.

De jQuery ejemplo página web:

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

pensé que podría construir una cadena (que no tiene sentido de todos modos) y dejarlo caer dentro de la {}, pero, obviamente, no entiendo esa parte.

nombre: no es una cadena y no se puede poner una variable en esa parte, así que ¿cómo podría yo poner dinámicamente elementos en lo que sea [de datos] es.

ACTUALIZACIÓN: Gracias por las respuestas. ¿Sería capaz de eliminar un nombre de parámetro del objeto si no encontré un valor válido más adelante o necesitaría destruirlo y volver a crearlo? Estoy usando algunos cuadros de selección para elegir cosas y es posible que no tenga algo seleccionado, así que no me gustaría pasar el nombre/valor del parámetro.

+0

ver mi respuesta actualizada – Pointy

Respuesta

13

Usted puede construir su objeto como éste:

var someVar = someRandomString(); 
$.getJSON('test.js', (function() { 
    var theData = {}; 
    theData[someVar] = someRandomValue(); 
    return theData; 
})(), function(jsonStuffFromServer) { 
    alert("JSON Data: " + jsonStuffFromServer.users[3].name); 
}); 

Por supuesto que no tiene que construir los "datos" objeto allí mismo, en una función anónima; puede hacerlo por separado con antelación:

var theData = {}; 
theData[someVariableWithANameInIt] = someRandomValue(); 
$.getJSON(url, theData, function(jsonStuff) { ... }); 

Así es como se podría construir un objeto, de un conjunto de <select> elementos en su página:

var theData = {}; 
$('#myForm select').filter(function() { return $(this).val() != ''; }) 
    .each(function() { 
    theData[this.name] = $(this).val(); 
    }); 

$.getJSON(url, theData, function(jsonStuff) { ... }); 
+0

Gracias por la actualización, estoy re-poblar una selecta basada en otra selecciona el valor elegido, así que estoy de buscar el opciones correctas a poblar basado en ciertos parámetros que pueden cambiar dinámicamente a través del formulario – Breadtruck

+0

@Pointy: Por cierto, el último código "seleccionar cada" podría ser realmente útil para otra cosa :) – Breadtruck

+0

¡Genial! Creo que hay una mejor forma de filtrar utilizando algo de magia en el "selector" (la parte '#myform select'), pero no estoy 100% seguro de cómo hacerlo y no he tomado café esta mañana :-) – Pointy

1

Usted puede hacer esto:

var myName = $("#nameField").val(); 
var myTime = $("#timeField").val(); 

$.getJSON("test.js", { 'name': myName, 'time': myTime}, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

es que los parámetros lo que quiere decir, o dinámicos, así como las variables?

+0

Sí que es correcta, los parámetros son dinámicos también – Breadtruck

0

El {} es un javascript object literal por lo llamo una propiedad de ese objeto.

Usted puede hacer algo como esto:

var data = {}; 
data.name = $("#input").val(); 
$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

O algo como esto

var data = { 
    name: $("#input").val(), 
}; 
$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 
+1

Creo que quiere que los parámetros * names * se computen en tiempo de ejecución. – Pointy

7

Crear un objeto, entonces usted puede poner cualquier propiedad que usted tiene gusto en él:

var data = new Object(); 

o:

var data = {}; 

Puede utilizar sintaxis de la propiedad:

data.name = 'John'; 
data.time = '2pm'; 

o asociado sintaxis de matrices (que es útil si el nombre del parámetro es una palabra clave):

data['name'] = 'John'; 
data['time'] = '2pm'; 

Puede, por las variables de uso del curso de los valores , e incluso utilizar variables para especificar el nombre del parámetro:

var param = 'name'; 
var value = 'John'; 
data[param] = value; 

Entonces sólo tiene que utilizar la variable de datos en la llamada :

$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 
+0

Así que creo que lo entiendo. ¿Podré eliminar un nombre de parámetro si no encuentro un valor válido más adelante? Estoy usando algunos cuadros de selección para elegir cosas y es posible que no tenga algo seleccionado, así que no me gustaría pasar el nombre/valor del parámetro. – Breadtruck

+0

No tiene que construir el objeto por adelantado. Solo edifíquelo, '', y solo ponga los valores. – Pointy

+0

Lo que quiero decir es que cuando eliges la selección superior, debes volver a empezar, para que las selecciones más bajas se reinicien, por así decirlo. – Breadtruck

Cuestiones relacionadas