jQuery – 非法调用

jQuery v1.7.2

我有这个function,执行时给我以下错误:

Uncaught TypeError: Illegal invocation 

这个function:

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

如果我从Ajax调用删除data ,它的工作..任何build议?

谢谢!

我认为你需要有string作为数据值。 它在jQuery内部可能是不正确的编码/序列化的To&From对象。

尝试:

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

还要注意行

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

你不需要jQuery包装器,因为To&From已经是jQuery对象了。

尝试在像这样的ajax设置中设置processData:false

 $.ajax({ url : base_url+'index.php', type: 'POST', dataType: 'json', data: data, cache : false, processData: false }).done(function(response) { alert(response); }); 

只是为了logging它也可能发生,如果你尝试使用未声明的variables像数据

 var layout = {}; $.ajax({ ... data: { layout: laoyut // notice misspelled variable name }, ... }); 

我的问题与processData无关。 这是因为我发送了一个函数,因为它没有足够的参数,所以以后不能调用。 具体来说,我不应该使用alert作为errorcallback。

 $.ajax({ url: csvApi, success: parseCsvs, dataType: "json", timeout: 5000, processData: false, error: alert }); 

有关更多信息,请参阅此答案,为什么会出现问题: 为什么JavaScript中某些函数调用称为“非法调用”?

我能够发现这一点的方式是通过给jQuery添加一个console.log(list[ firingIndex ]) ,以便跟踪它正在发射的内容。

这是修复:

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