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呼び出しから削除すると、動作します。
ありがとう!
データ値として文字列が必要だと思います。 To&Fromオブジェクトを正しくエンコード/シリアライズしていないjQueryの内部的なものである可能性があります。
試してください:
var data = {
from : from.val(),
to : to.val(),
speed : speed
};
行にも注意してください:
$(from).css(...
$(to).css(
To&FromはすでにjQueryオブジェクトであるため、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);
});
記録のためだけに、次のようなデータで宣言されていない変数を使用しようとした場合にも発生する可能性があります
var layout = {};
$.ajax({
...
data: {
layout: laoyut // notice misspelled variable name
},
...
});
Javascript FormData APIを使用してファイルをアップロードしてフォームを送信する場合、以下の2つのオプションを設定する必要があります。
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');
}
}
});
});
私の場合、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');
}
)}
私の問題はprocessData
とは無関係でした。それは、後でapply
で呼び出すことができない関数を送信したためです。関数に十分な引数がないためです。具体的には、alert
をerror
コールバックとして使用するべきではありません。
$.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
});
私の場合、私はちょうど変更しました
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) => {
}
})
そしてそれは働いた。