библиотека jQuery - незаконный вызов
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 вызова, он работает .. есть предложения?
спасибо!
4 ответа:
Я думаю, что вам нужно иметь строки в качестве значений данных. Вероятно, это что-то внутри jQuery, которое не кодирует/сериализует правильно объекты To & From.
попробуй:
var data = { from : from.val(), to : to.val(), speed : speed };
обратите внимание также на следующие строки:
$(from).css(... $(to).css(
вам не нужна оболочка jQuery, поскольку To & From уже являются объектами jQuery.
попробуйте установить processData: false в настройках ajax, как это
$.ajax({ url : base_url+'index.php', type: 'POST', dataType: 'json', data: data, cache : false, processData: false }).done(function(response) { alert(response); });
только для записи это также может произойти, если вы попытаетесь использовать необъявленную переменную в данных, таких как
var layout = {}; $.ajax({ ... data: { layout: laoyut // notice misspelled variable name }, ... });
моя проблема не была связана с
processData
. Это было потому, что я послал функцию, которая не может быть позднее сapply
потому что у него не было достаточно аргументов. В частности, я не должен был использоватьalert
какerror
обратный.$.ajax({ url: csvApi, success: parseCsvs, dataType: "json", timeout: 5000, processData: false, error: alert });
посмотреть этот ответ для получения дополнительной информации о том, почему это может стать проблемой: почему некоторые вызовы функций называются "незаконными вызовами" в JavaScript?
способ, которым я смог обнаружить это, был путем добавления
console.log(list[ firingIndex ])
в jQuery, чтобы я мог отслеживать, что он стрелял.это исправить:
function myError(jqx, textStatus, errStr) { alert(errStr); } $.ajax({ url: csvApi, success: parseCsvs, dataType: "json", timeout: 5000, error: myError // Note that passing `alert` instead can cause a "jquery.js:3189 Uncaught TypeError: Illegal invocation" sometimes });