jQuery v1.7.2
Mam tę funkcję, która powoduje następujący błąd podczas wykonywania:
Uncaught TypeError: Illegal invocation
Oto funkcja:
$('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;
});
Jeśli usunę data
z wywołania Ajax, to działa .. jakieś sugestie?
Dzięki!
from
z danych. Może jest to sprzeczne z jquery zOdpowiedzi:
Myślę, że musisz mieć ciągi jako wartości danych. Prawdopodobnie jest to coś wewnętrznie w jQuery, co nie koduje / serializuje poprawnie obiektów To i From.
Próbować:
Zauważ również na liniach:
Nie potrzebujesz opakowania jQuery, ponieważ Do i Od są już obiektami jQuery.
źródło
$from = $('#from');
To pomaga mi zapamiętać, że reprezentuje obiekt jQuery, co pomaga uniknąć wywoływania metody na czymś, co jest ciągiem znaków lub próbach manipulowania łańcuchem.toString()
lub czymś, gdy jest to obiekt jQuery..val()
Brakowało mi części, więc nie przekazywała wartości.Spróbuj ustawić processData: false w ustawieniach Ajax, takich jak to
źródło
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
. Zrobiłem podczas przesyłania pliku. Zobacz stackoverflow.com/questions/21044798/…Dla przypomnienia może się to również zdarzyć, jeśli spróbujesz użyć niezadeklarowanej zmiennej w danych, takich jak
źródło
Jeśli chcesz przesłać formularz przy pomocy Javascript FormData API z wgrywaniem plików musisz ustawić poniżej dwie opcje:
Możesz spróbować w następujący sposób:
źródło
W moim przypadku po prostu się zmieniłem
Uwaga: tak jest w przypadku Django, więc dodałem
csrftoken
. W twoim przypadku możesz go nie potrzebować.do
i zadziałało.
źródło
W moim przypadku nie zdefiniowałem wszystkich zmiennych, które przekazuję do danych w Ajax.
Właśnie zdefiniowałem zmienną
var search_candidate = "candidate name";
i jej działanie.źródło
Mój problem nie był związany
processData
. Było tak, ponieważ wysłałem funkcję, której nie można później wywołać,apply
ponieważ nie ma wystarczającej liczby argumentów. W szczególności nie powinienem był używaćalert
jakoerror
oddzwaniania.Zobacz tę odpowiedź, aby uzyskać więcej informacji na temat tego, dlaczego może to być problem: Dlaczego niektóre wywołania funkcji są określane w JavaScript jako „nielegalne wywołania”?
Sposób, w jaki mogłem to odkryć, polegał na dodaniu a
console.log(list[ firingIndex ])
do jQuery, aby móc śledzić, co uruchamia.To była poprawka:
źródło
W moim przypadku (używając webpacka 4) w ramach anonimowej funkcji, której używałem jako callback.
Musiałem użyć
window.$.ajax()
zamiast$.ajax()
pomimo:źródło
Jest to również przyczyna: jeśli zbudowałeś kolekcję jQuery (przez .map () lub coś podobnego), nie powinieneś używać tej kolekcji w danych .ajax (). Ponieważ nadal jest to obiekt jQuery , a nie zwykły JavaScript Array . Powinieneś użyć .get () na i, aby uzyskać zwykłą tablicę js i powinieneś użyć jej w ustawieniach danych w .ajax ().
źródło