jQuery v1.7.2
Tenho esta função que está me dando o seguinte erro durante a execução:
Uncaught TypeError: Illegal invocation
Esta é a função:
$('form[name="twp-tool-distance-form"]').on('submit', function(e) {
e.preventDefault();
var from = $('form[name="twp-tool-distance-form"] input[name="from"]');
var to = $('form[name="twp-tool-distance-form"] input[name="to"]');
var unit = $('form[name="twp-tool-distance-form"] input[name="unit"]');
var speed = game.unit.speed($(unit).val());
if (!/^\d{3}\|\d{3}$/.test($(from).val()))
{
$(from).css('border-color', 'red');
return false;
}
if (!/^\d{3}\|\d{3}$/.test($(to).val()))
{
$(to).css('border-color', 'red');
return false;
}
var data = {
from : from,
to : to,
speed : speed
};
$.ajax({
url : base_url+'index.php',
type: 'POST',
dataType: 'json',
data: data,
cache : false
}).done(function(response) {
alert(response);
});
return false;
});
Se eu remover data
de uma chamada de ajax, funciona .. alguma sugestão?
Obrigado!
from
dos dados. Talvez esteja em conflito com jquery deRespostas:
Acho que você precisa ter strings como valores de dados. Provavelmente é algo internamente no jQuery que não está codificando / serializando corretamente os objetos To & From.
Experimentar:
Observe também nas linhas:
Você não precisa do wrapper jQuery, pois To & From já são objetos jQuery.
fonte
$from = $('#from');
Isso me ajuda a lembrar que representa um objeto jQuery que ajuda a evitar chamar um método em algo que é uma string ou tentar manipular uma string com.toString()
ou algo quando é um objeto jQuery..val()
faltando a parte, então não estava passando o valor.Tente definir processData: false em configurações ajax como esta
fonte
By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.
contentType: false
. Eu fiz ao enviar um arquivo. Vejo stackoverflow.com/questions/21044798/…Só para registro, também pode acontecer se você tentar usar uma variável não declarada em dados como
fonte
Se você deseja enviar um formulário usando a API Javascript FormData com upload de arquivos, você precisa definir as duas opções a seguir:
Você pode tentar o seguinte:
fonte
No meu caso, eu apenas mudei
Nota: Este é o caso do Django, então eu adicionei
csrftoken
. No seu caso, pode não ser necessário.para
e funcionou.
fonte
No meu caso, não defini todas as variáveis que estou passando para os dados no ajax.
Acabei de definir a variável
var search_candidate = "candidate name";
e seu funcionamento.fonte
Meu problema não estava relacionado com
processData
. Foi porque enviei uma função que não pode ser chamada posteriormenteapply
porque não tinha argumentos suficientes. Especificamente, eu não deveria ter usadoalert
comoerror
retorno de chamada.Veja esta resposta para obter mais informações sobre por que isso pode ser um problema: Por que certas chamadas de função são chamadas de "invocações ilegais" em JavaScript?
Descobri isso adicionando um
console.log(list[ firingIndex ])
ao jQuery para rastrear o que ele estava disparando.Esta foi a solução:
fonte
No meu caso (usando webpack 4) em uma função anônima, que eu estava usando como retorno de chamada.
Tive que usar em
window.$.ajax()
vez de$.ajax()
ter:fonte
Além disso, esta é uma causa também: se você construiu uma coleção jQuery (via .map () ou algo semelhante), você não deve usar essa coleção nos dados .ajax (). Porque ainda é um objeto jQuery , não um array JavaScript simples . Você deve usar .get () no e para obter o array js simples e deve usá-lo na configuração de dados em .ajax ().
fonte