jQuery v1.7.2
У меня есть эта функция, которая при выполнении выдает следующую ошибку:
Uncaught TypeError: Illegal invocation
Вот функция:
$('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;
});
Если я удалю data
из вызова ajax, он будет работать .. любые предложения?
Спасибо!
from
из данных. Возможно, это противоречит jquery отОтветы:
Я думаю, вам нужны строки в качестве значений данных. Вероятно, что-то внутри jQuery неправильно кодирует / сериализует объекты To & From.
Пытаться:
Обратите внимание также на строки:
Вам не нужна оболочка jQuery, поскольку To и From уже являются объектами jQuery.
источник
$from = $('#from');
называю свои переменные так: Это помогает мне помнить, что они представляют собой объект jQuery, который помогает избежать вызова метода для чего-то, что является строкой, или попыток манипулировать строкой.toString()
или чем-то еще, когда это объект jQuery..val()
отсутствовала деталь, поэтому она не передавала значение.Попробуйте установить processData: false в таких настройках ajax
источник
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
. Я сделал при загрузке файла. См stackoverflow.com/questions/21044798/...Просто для записи это также может произойти, если вы попытаетесь использовать необъявленную переменную в таких данных, как
источник
Если вы хотите отправить форму с использованием Javascript FormData API с загрузкой файлов, вам необходимо установить следующие два параметра:
Вы можете попробовать следующее:
источник
В моем случае я просто изменил
Примечание: это в случае Django, поэтому я добавил
csrftoken
. В вашем случае это может не понадобиться.к
и это сработало.
источник
В моем случае я не определяю все переменные, которые я передаю данным в ajax.
Я только что определил переменную
var search_candidate = "candidate name";
и ее работу.источник
Моя проблема не связана с
processData
. Это произошло потому, что я отправил функцию, которую нельзя вызвать позже,apply
потому что у нее недостаточно аргументов. В частности , я не должен был использовать вalert
качествеerror
обратного вызова.См. Этот ответ для получения дополнительной информации о том, почему это может быть проблемой: Почему определенные вызовы функций в JavaScript называются «незаконными вызовами»?
Я смог обнаружить это, добавив a
console.log(list[ firingIndex ])
в jQuery, чтобы я мог отслеживать, что он запускает.Это было исправление:
источник
В моем случае (с использованием webpack 4) в анонимной функции, которую я использовал в качестве обратного вызова.
Мне пришлось использовать
window.$.ajax()
вместо того, чтобы$.ajax()
иметь:источник
Также это тоже причина: если вы создали коллекцию jQuery (через .map () или что-то подобное), вам не следует использовать эту коллекцию в данных .ajax (). Потому что это все еще объект jQuery , а не простой массив JavaScript . Вы должны использовать .get () в и, чтобы получить простой массив js, и должны использовать его для настройки данных в .ajax ().
источник