библиотека 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 78

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
});