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
作为error
callback。
$.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 });