jQuery v1.7.2
Ich habe diese Funktion, die mir beim Ausführen den folgenden Fehler gibt:
Uncaught TypeError: Illegal invocation
Hier ist die Funktion:
$('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;
});
Wenn ich entferne data
von Ajax Call , funktioniert es .. irgendwelche Vorschläge?
Vielen Dank!
from
Daten zu entfernen . Vielleicht widerspricht es jquery's vonAntworten:
Ich denke, Sie müssen Zeichenfolgen als Datenwerte haben. Es ist wahrscheinlich etwas intern in jQuery, das die To & From-Objekte nicht korrekt codiert / serialisiert.
Versuchen:
Beachten Sie auch in den Zeilen:
Sie benötigen den jQuery-Wrapper nicht, da To & From bereits jQuery-Objekte sind.
quelle
$from = $('#from');
Dies hilft mir, mich daran zu erinnern, dass es ein jQuery-Objekt darstellt, wodurch vermieden wird, eine Methode für etwas aufzurufen, das eine Zeichenfolge ist, oder zu versuchen, eine Zeichenfolge mit.toString()
oder etwas zu manipulieren , wenn es sich um ein jQuery-Objekt handelt..val()
Teil vermisst, so dass es den Wert nicht übergab.Versuchen Sie, processData: false in solchen Ajax-Einstellungen festzulegen
quelle
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
. Ich habe beim Hochladen einer Datei. Siehe stackoverflow.com/questions/21044798/…Nur für den Datensatz kann es auch passieren, wenn Sie versuchen, nicht deklarierte Variablen in Daten wie zu verwenden
quelle
Wenn Sie ein Formular mit der Javascript FormData- API zum Hochladen von Dateien senden möchten, müssen Sie die folgenden zwei Optionen festlegen:
Sie können Folgendes versuchen:
quelle
In meinem Fall habe ich mich gerade verändert
Hinweis: Dies ist im Fall von Django, also habe ich hinzugefügt
csrftoken
. In Ihrem Fall benötigen Sie es möglicherweise nicht.zu
und es hat funktioniert.
quelle
In meinem Fall habe ich nicht alle Variablen definiert, die ich an Daten in Ajax übergebe.
Ich habe gerade die Variable
var search_candidate = "candidate name";
und ihre Funktionsweise definiert.quelle
Mein Problem hatte nichts damit zu tun
processData
. Das lag daran, dass ich eine Funktion gesendet habe, die später nicht mehr aufgerufen werden kann,apply
weil sie nicht genügend Argumente enthält. Insbesondere hätte ich nichtalert
alserror
Rückruf verwenden sollen.In dieser Antwort finden Sie weitere Informationen dazu, warum dies ein Problem sein kann: Warum werden bestimmte Funktionsaufrufe in JavaScript als "illegale Aufrufe" bezeichnet?
Die Art und Weise, wie ich dies entdecken konnte, war das Hinzufügen von a
console.log(list[ firingIndex ])
zu jQuery, damit ich verfolgen konnte, was ausgelöst wurde.Dies war die Lösung:
quelle
In meinem Fall (mit Webpack 4) innerhalb einer anonymen Funktion, die ich als Rückruf verwendet habe.
Ich musste verwenden,
window.$.ajax()
anstatt$.ajax()
trotz:quelle
Auch dies ist eine Ursache: Wenn Sie eine jQuery-Sammlung (über .map () oder ähnliches) erstellt haben, sollten Sie diese Sammlung nicht in den Daten von .ajax () verwenden. Da es sich immer noch um ein jQuery-Objekt handelt , nicht um ein einfaches JavaScript-Array . Sie sollten .get () im Array und verwenden, um ein einfaches js-Array abzurufen, und es für die Dateneinstellung in .ajax () verwenden.
quelle