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;
});
如果我从ajax调用中移除data
,它是否有效..任何建议?
谢谢!
答案 0 :(得分:104)
我认为您需要将字符串作为数据值。它可能是jQuery内部没有正确编码/序列化To& amp; amp; amp; amp;来自对象。
尝试:
var data = {
from : from.val(),
to : to.val(),
speed : speed
};
另请注意:
$(from).css(...
$(to).css(
你不需要将jQuery包装器作为To& amp;来自已经是jQuery对象。
答案 1 :(得分:90)
尝试在像
这样的ajax设置中设置 processData:false$.ajax({
url : base_url+'index.php',
type: 'POST',
dataType: 'json',
data: data,
cache : false,
processData: false
}).done(function(response) {
alert(response);
});
答案 2 :(得分:17)
只是为了记录,如果您尝试在
等数据中使用未声明的变量,也会发生这种情况var layout = {};
$.ajax({
...
data: {
layout: laoyut // notice misspelled variable name
},
...
});
答案 3 :(得分:6)
如果您要使用Javascript 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');
}
}
});
});
答案 4 :(得分:0)
我的问题与c
无关。这是因为我发送了一个以后不能用processData
调用的函数,因为它没有足够的参数。具体来说,我不应该使用apply
作为alert
回调。
error
有关可能出现问题的详细信息,请参阅此答案:Why are certain function calls termed "illegal invocations" in JavaScript?
我能够发现这一点的方法是向jQuery添加$.ajax({
url: csvApi,
success: parseCsvs,
dataType: "json",
timeout: 5000,
processData: false,
error: alert
});
,以便我可以跟踪它正在触发的内容。
这是修复:
console.log(list[ firingIndex ])
答案 5 :(得分:0)
就我而言,我只是更改了
注意:这是在Django中的情况,因此我添加了csrftoken
。就您而言,您可能不需要它。
添加了
contentType: false
,processData: false
评论了
"Content-Type": "application/json"
$.ajax({
url: location.pathname,
type: "POST",
crossDomain: true,
dataType: "json",
headers: {
"X-CSRFToken": csrftoken,
"Content-Type": "application/json"
},
data:formData,
success: (response, textStatus, jQxhr) => {
},
error: (jQxhr, textStatus, errorThrown) => {
}
})
到
$.ajax({
url: location.pathname,
type: "POST",
crossDomain: true,
dataType: "json",
contentType: false,
processData: false,
headers: {
"X-CSRFToken": csrftoken
// "Content-Type": "application/json",
},
data:formData,
success: (response, textStatus, jQxhr) => {
},
error: (jQxhr, textStatus, errorThrown) => {
}
})
它奏效了。
答案 6 :(得分:0)
就我而言,我还没有定义要传递给ajax数据的所有变量。
var page = 1;
$.ajax({
url: 'your_url',
type: "post",
data: { 'page' : page, 'search_candidate' : search_candidate }
success: function(result){
alert('function called');
}
)}
我刚刚定义了变量var search_candidate = "candidate name";
及其工作原理。
var page = 1;
var search_candidate = "candidate name"; // defined
$.ajax({
url: 'your_url',
type: "post",
data: { 'page' : page, 'search_candidate' : search_candidate }
success: function(result){
alert('function called');
}
)}
答案 7 :(得分:0)
在我使用匿名函数的情况下(使用webpack 4),我将其用作回调。
尽管有以下几点,我仍必须使用window.$.ajax()
而不是$.ajax()
import $ from 'jquery';
window.$ = window.jQuery = $;
答案 8 :(得分:0)
这也是一个原因: 如果您构建了jQuery集合(通过.map()或类似的东西),则不应在.ajax()的数据中使用此集合。因为它仍然是 jQuery对象,而不是简单的 JavaScript数组。您应该在和处使用.get()来获取纯js数组,并应在.ajax()的数据设置上使用它。