Вопрос по ajax, jquery, post – JQuery - незаконный вызов

87

jQuery v1.7.2

У меня есть эта функция, которая дает мне следующую ошибку при выполнении:

<code>Uncaught TypeError: Illegal invocation
</code>

Вот эта функция:

<code>$('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;
});
</code>

Если я удалюdata от вызова ajax, это работает .. какие-либо предложения?

Спасибо!

Вы понимаете, что пытаетесь выдвинуть объекты jQuery, а не JSON? asawyer
Регулярно случается со мной, когда я забываю .val () на каком-то объекте jQuery ... userfuser
попробуйте удалитьfrom из данных. Может быть, это конфликтует с JQuery из gopi1410

Ваш Ответ

5   ответов
103

что вам нужно иметь строки в качестве значений данных. Скорее всего, это что-то внутри JQuery, которое не кодирует / сериализует правильно To & amp; Из объектов.

Пытаться:

var data = {
    from : from.val(),
    to : to.val(),
    speed : speed
};

Обратите внимание также на строки:

$(from).css(...
$(to).css(

Вам не нужна оболочка jQuery, как & amp; Из уже есть объекты jQuery.

Спасибо, забыл, что я загружал объекты вместо строк, обычно я загружаю строки :) yoda
У меня был.val() часть отсутствует, поэтому значение не передается.
Этот подход помогает мне. Я называю свои переменные как$from = $('#from'); Это помогает мне помнить, что он представляет объект jQuery, который помогает избежать вызова метода для чего-либо, что является строкой, или попытки манипулировать строкой с помощью.toString() или что-то, когда это объект jQuery.
4

FormData API с загрузкой файлов нужно установить под двумя опциями:

processData: false,
contentType: false

Вы можете попробовать следующим образом:

//Ajax Form Submission
$(document).on("click", ".afs", function (e) {
    e.preventDefault();
    e.stopPropagation();
    var thisBtn = $(this);
    var thisForm = thisBtn.closest("form");
    var formData = new FormData(thisForm[0]);
    //var formData = thisForm.serializeArray();

    $.ajax({
        type: "POST",
        url: "<?=base_url();?>assignment/createAssignment",
        data: formData,
        processData: false,
        contentType: false,
        success:function(data){
            if(data=='yes')
            {
                alert('Success! Record inserted successfully');
            }
            else if(data=='no')
            {
                alert('Error! Record not inserted successfully')
            }
            else
            {
                alert('Error! Try again');
            }
        }
    });
});
17

это также может произойти, если вы попытаетесь использовать необъявленную переменную в таких данных, как

var layout = {};
$.ajax({
  ...
  data: {
    layout: laoyut // notice misspelled variable name
  },
  ...
});
Спасибо за это!! Это было то, где я был заблокирован.
0

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

processData: false в настройках AJAX, как это

$.ajax({
    url : base_url+'index.php',
    type: 'POST',
    dataType: 'json',
    data: data,
    cache : false,
    processData: false
}).done(function(response) {
    alert(response);
});
Спасибо работает отлично.
почему это работает?
спасибо, это сработало: D
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.
спасибо, это сработало и для меня

Похожие вопросы