jQuery v1.7.2
Tengo esta función que me está dando el siguiente error al ejecutar:
Uncaught TypeError: Illegal invocation
Esta es la función:
$('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;
});
Si data
elimino de la llamada ajax, funciona ... ¿alguna sugerencia?
¡Gracias!
from
de los datos. Tal vez esté en conflicto con jquery deRespuestas:
Creo que necesitas tener cadenas como valores de datos. Es probable que sea algo interno dentro de jQuery que no esté codificando / serializando correctamente los objetos hacia y desde.
Tratar:
Note también en las líneas:
No necesita el contenedor jQuery ya que To & From ya son objetos jQuery.
fuente
$from = $('#from');
Esto me ayuda a recordar que representa un objeto jQuery que ayuda a evitar llamar a un método en algo que es una cadena o intentar manipular una cadena.toString()
o algo cuando es un objeto jQuery..val()
faltaba la pieza, por lo que no estaba pasando el valor.Intente establecer processData: false en configuraciones de ajax como esta
fuente
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
. Lo hice al subir un archivo. Ver stackoverflow.com/questions/21044798/…Solo para el registro, también puede suceder si intenta utilizar una variable no declarada en datos como
fuente
Si desea enviar un formulario utilizando Javascript FormData API con la carga de archivos, debe establecer dos opciones a continuación:
Puede intentar lo siguiente:
fuente
En mi caso, acabo de cambiar
Nota: Esto es en el caso de Django, así que agregué
csrftoken
. En su caso, es posible que no lo necesite.a
Y funcionó.
fuente
En mi caso, no he definido todas las variables que paso a los datos en ajax.
Acabo de definir la variable
var search_candidate = "candidate name";
y su funcionamiento.fuente
Mi problema no estaba relacionado con
processData
. Fue porque envié una función que no se puede llamar más tardeapply
porque no tenía suficientes argumentos. Específicamente, no debería haberlo usadoalert
comoerror
devolución de llamada.Consulte esta respuesta para obtener más información sobre por qué eso puede ser un problema: ¿Por qué ciertas llamadas a funciones se denominan "invocaciones ilegales" en JavaScript?
La forma en que pude descubrir esto fue agregando un
console.log(list[ firingIndex ])
a jQuery para poder rastrear lo que estaba disparando.Esta fue la solución:
fuente
En mi caso (usando webpack 4) dentro de una función anónima, que estaba usando como devolución de llamada.
Tuve que usar en
window.$.ajax()
lugar de a$.ajax()
pesar de tener:fuente
Además, esto también es una causa: si creó una colección jQuery (a través de .map () o algo similar), entonces no debería usar esta colección en los datos de .ajax (). Porque sigue siendo un objeto jQuery , no una matriz JavaScript simple . Debe usar .get () en y para obtener una matriz js simple y debe usarlo en la configuración de datos en .ajax ().
fuente