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?
Dos documentos jQuery para
processData
:Fonte: http://api.jquery.com/jquery.ajax
Parece que você terá que usar
processData
para enviar seus dados para o servidor ou modificar seu script php para suportar parâmetros codificados de querystring.fonte
Eu estava recebendo este erro ao postar um objeto FormData porque não estava configurando a chamada ajax corretamente. A configuração abaixo corrigiu meu problema.
fonte
Este é um objeto, não uma matriz:
Você provavelmente quer:
fonte
$_GET
array do lado do servidor (var_export($_GET)
saídasarray ( 'undefined' => 'undefined', )
)$.ajax
manipulador:type:'get',
data
chaves devem ser encontradas no array GET, certo? Ou talvez eles sejam enviados por outro método de solicitação de qualquer maneira?data: {foo:'myfoo', bar:'mybar'}
, pode haver algum outro problema, eu acho.e[e.selectedIndex]
enquanto deveria ter passado seu valore[e.selectedIndex].value
. Depois de corrigir essa falha, a notação de objeto funciona bem.Tive o mesmo problema recentemente, resolvido ao adicionar
traditional: true,
fonte
fonte
contentType
eprocessData
, o erro continuará aparecendo. Eu adicionei os dois campos e funcionou para mim. Acho que op estava tentando indicar os dois campos importantes.fonte
Experimente isto:
fonte