2012-04-21 13 views
11

Mi objetivo general es obtener todas las listas desplegables de una página y enviarlas para que sean procesadas por un archivo php.¿Enviar una matriz de objetos como datos de publicación de Ajax?

En este momento, la forma en que lo estoy haciendo en jQuery es hacer una matriz de programación general y luego agregar cada elemento para actualizar a esa matriz. Entonces tengo algo como:

var schedule = []; 
var data = { 
    'user_id' : '12', 
    'day_of_week' : 'Monday', 
    'when' : 'start', 
    'time' : '12 AM' 
} 
schedule.push(data); 
var data = { 
    'user_id' : '13', 
    'day_of_week' : 'Tuesday', 
    'when' : 'end', 
    'time' : '12 AM' 
} 
schedule.push(data); 
// schedule would have two objects in it 

Obviamente en loops y cosas.

Por lo tanto, mi matriz de programación tiene dos objetos, en este caso.

Ahora, ¿es posible usar esa matriz de programación como datos ajax? No funciona si hago algo como:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: schedule, 
    type: 'POST' 
}); 

Pero si en lugar de cambiarlo a schedule[0] funciona muy bien, pero sólo para la primera hora de la matriz horario, obviamente.

+0

Retire el '' ..schedule es una variable, no una cadena. Además jQuery codificará su matriz como un objeto JSON que necesitará decodificar en el servidor. – gpasci

+1

A menos que me equivoque, Schedule no es una matriz de matrices. Es una matriz de objetos, ya que 'datos' es un objeto. – xbonez

+0

¿Alguna razón específica por la que no estás usando 'type: 'JSON''? –

Respuesta

3

Asegúrese de estar utilizando la versión correcta de jQuery. En versiones anteriores, tenías que pasar un aguijón; las nuevas versiones usan "conjetura inteligente" en la variable data. Puede decirle explícitamente a jQuery que le está pasando un objeto javascript con el parámetro dataType, o puede dejar que jQuery lo resuelva.

Documentación

jQuery.ajax() - http://api.jquery.com/jQuery.ajax/

2

pasarlo como JSON:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST', 
    dataType: 'JSON' 
}); 

Se enviaría una cadena JSON codificado al servidor, el cual lenguajes del lado del servidor pueden analizar. (en PHP, está hecho con json_decode()).

+1

¿Qué estoy pasando a json_deocde() sin embargo? $ _POST ['agenda']? – Ben

+0

@Ben: Sí. 'schedule' consistirá en la cadena JSON. – xbonez

+0

De cualquier manera, sigo recibiendo nada. He intentado hacer 'type: 'POST'' y' type:' JSON'' con cualquier combinación de datos y sigo obteniendo un valor nulo. ¿Qué podría estar mal? Si hago 'console.log (schedule)' antes de la parte ajax, puedo ver todos mis objetos, así sé que están ahí. – Ben

11

El atributo data debe ser un objeto.

Lo que puede hacer es lo siguiente:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST' 
}); 

Así que si recibe este por ejemplo en PHP tiene $_POST["schedule"]. Una que es exactamente la misma que tenías en JavaScript.

Ohh sí, lo he olvidado ... ¡también eche un vistazo a .serialize() y .serializeArray()!

+0

Los documentos actuales de jQuery indican que puede ser un objeto, una cadena o una matriz. –

Cuestiones relacionadas