Tengo dos elementos seleccionados, A y B: cuando la opción seleccionada de A cambia, las opciones de B deben actualizarse en consecuencia. Cada elemento en A implica muchos elementos en B, es una relación de uno a muchos (A contiene naciones, B debe contener ciudades ubicadas en la nación dada).
La función do_ajax
debe ejecutar la solicitud asincrónica:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Para actualizar las opciones de B, agregué una llamada de función en el onChange
evento de A. Aquí está la función que se ejecuta cuando se activa el evento onChange (of A
):
function my_onchange(e) // "e" is element "A"
{
var sel_B = ... ; // get select element "B"
// I skipped some code here
// ...
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
do_ajax(city_sel, data, 'ajax_handler.php');
}
}
He leído en documentos de JQuery que data
pueden ser una matriz (pares clave-valor). Me sale el error si pongo:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
En cambio, no obtengo ese error si mis datos son una cadena:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
Pero necesito la "versión de matriz" de la variable, en mi código php del lado del servidor.
los Uncaught TypeError: Illegal invocation
encuentra en el archivo "jquery-1.7.2.min.js", que está totalmente comprimido, por lo que no pude averiguar qué parte del código generó el error.
¿Hay alguna configuración que pueda cambiar en mi código para que acepte datos como una matriz asociativa?
De los documentos de jQuery para
processData
:Fuente: http://api.jquery.com/jquery.ajax
Parece que tendrá que usarlo
processData
para enviar sus datos al servidor o modificar su script php para admitir parámetros codificados de cadena de consulta.fuente
Recibí este error al publicar un objeto FormData porque no estaba configurando la llamada ajax correctamente. La configuración a continuación solucionó mi problema.
fuente
Este es un objeto, no una matriz:
Probablemente quieras:
fuente
$_GET
matriz del lado del servidor (var_export($_GET)
salidasarray ( 'undefined' => 'undefined', )
)$.ajax
controlador:type:'get',
data
claves del lado del servidor deben encontrarse en la matriz GET, ¿verdad? ¿O tal vez se envían a través de otro método de solicitud de todos modos?data: {foo:'myfoo', bar:'mybar'}
, creo que podría haber algún otro problema.e[e.selectedIndex]
mientras debería haber pasado su valore[e.selectedIndex].value
. Después de corregir este defecto, la notación de objetos funciona bien.Tuve el mismo problema recientemente, resuelto agregando
traditional: true,
fuente
fuente
contentType
yprocessData
, el error seguirá apareciendo. Agregué los dos campos y funcionó para mí. Creo que op estaba tratando de indicar los dos campos importantes.fuente
Prueba esto:
fuente