jQuery v1.7.2
J'ai cette fonction qui me donne l'erreur suivante lors de l'exécution:
Uncaught TypeError: Illegal invocation
Voici la fonction:
$('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 je supprime data
de l'appel ajax, cela fonctionne .. des suggestions?
Merci!
from
des données. Peut-être qu'il est en conflit avec jquery deRéponses:
Je pense que vous devez avoir des chaînes comme valeurs de données. C'est probablement quelque chose en interne dans jQuery qui n'encode / sérialise pas correctement les objets To & From.
Essayer:
Remarquez également sur les lignes:
Vous n'avez pas besoin du wrapper jQuery car To & From sont déjà des objets jQuery.
la source
$from = $('#from');
Cela m'aide à me souvenir qu'il représente un objet jQuery qui évite d'appeler une méthode sur quelque chose qui est une chaîne ou d'essayer de manipuler une chaîne avec.toString()
ou quelque chose quand c'est un objet jQuery..val()
pièce manquante, donc ça ne passait pas la valeur.Essayez de définir processData: false dans les paramètres ajax comme celui-ci
la source
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
. Je l'ai fait lors du téléchargement d'un fichier. Voir stackoverflow.com/questions/21044798/…Pour mémoire, cela peut également arriver si vous essayez d'utiliser une variable non déclarée dans des données telles que
la source
Si vous souhaitez soumettre un formulaire à l'aide de l' API Javascript FormData avec le téléchargement de fichiers, vous devez définir ci-dessous deux options:
Vous pouvez essayer comme suit:
la source
Dans mon cas, je viens de changer
Remarque: c'est dans le cas de Django, j'ai donc ajouté
csrftoken
. Dans votre cas, vous n'en aurez peut-être pas besoin.à
et cela a fonctionné.
la source
Dans mon cas, je n'ai pas défini toutes les variables que je transmets aux données en ajax.
Je viens de définir la variable
var search_candidate = "candidate name";
et son fonctionnement.la source
Mon problème n'était pas lié à
processData
. C'est parce que j'ai envoyé une fonction qui ne peut pas être appelée plus tardapply
car elle n'avait pas assez d'arguments. Plus précisément, je n'aurais pas dû utiliseralert
commeerror
rappel.Consultez cette réponse pour plus d'informations sur les raisons pour lesquelles cela peut être un problème: Pourquoi certains appels de fonction sont-ils appelés «invocations illégales» en JavaScript?
La façon dont j'ai pu découvrir cela a été d'ajouter un
console.log(list[ firingIndex ])
à jQuery pour que je puisse suivre ce qu'il tirait.C'était la solution:
la source
Dans mon cas (en utilisant webpack 4) dans une fonction anonyme, que j'utilisais comme rappel.
J'ai dû utiliser
window.$.ajax()
au lieu de$.ajax()
malgré avoir:la source
C'est aussi une cause aussi: Si vous avez construit une collection jQuery (via .map () ou quelque chose de similaire), vous ne devriez pas utiliser cette collection dans les données de .ajax (). Parce que c'est toujours un objet jQuery , pas un tableau JavaScript simple . Vous devez utiliser .get () au niveau de et pour obtenir le tableau js brut et l'utiliser sur le paramètre de données sur .ajax ().
la source