Eu tenho dois elementos selecionados, A e B: quando a opção selecionada de A muda, as opções de B devem ser atualizadas de acordo. Cada elemento em A implica muitos elementos em B, é uma relação um-para-muitos (A contém nações, B deve conter cidades localizadas em uma determinada nação).
A função do_ajax
deve executar a solicitação assíncrona:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Para atualizar as opções de B, adicionei uma chamada de função no onChange
evento de A. Esta é a função que é executada quando o evento onChange (de A
) é acionado:
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');
}
}
Eu li em documentos JQuery que data
podem ser uma matriz (pares de valores-chave). Recebo o erro se colocar:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
Em vez disso, não recebo esse erro se meus dados forem uma string:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
Mas eu preciso da "versão do array" da variável, no meu código php do lado do servidor.
O Uncaught TypeError: Illegal invocation
está localizado no arquivo "jquery-1.7.2.min.js", que está todo compactado, então não consegui descobrir que parte do código gerou o erro.
Existe alguma configuração que eu possa alterar em meu código para que ele aceite dados como uma matriz associativa?