jQuery - 잘못된 호출
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 콜에서 동작합니다.좋은 의견이라도 있나?
감사합니다.
다음과 같이 ajax 설정에서 processData: false를 설정하려고 합니다.
$.ajax({
url : base_url+'index.php',
type: 'POST',
dataType: 'json',
data: data,
cache : false,
processData: false
}).done(function(response) {
alert(response);
});
데이터 값으로 문자열이 있어야 할 것 같아요.jQuery 내부에서 To & From Objects를 올바르게 인코딩/시리얼라이즈하지 않는 것이 원인일 수 있습니다.
시험:
var data = {
from : from.val(),
to : to.val(),
speed : speed
};
회선에서도 주의해 주세요.
$(from).css(...
$(to).css(
To와 From은 이미 jQuery 오브젝트이므로 jQuery 래퍼는 필요 없습니다.
기록상 다음과 같은 데이터에 미신고 변수를 사용하려고 할 경우에도 발생할 수 있습니다.
var layout = {};
$.ajax({
...
data: {
layout: laoyut // notice misspelled variable name
},
...
});
업로드 파일과 함께 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');
}
}
});
});
저 같은 경우에는 그냥 바뀌었어요.
비고: 장고의 경우라서, 저는 이렇게 덧붙였습니다.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) => {
}
})
그리고 그것은 성공하였다.
My의 경우, 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: false, 내용유형: false. 작업에 필요합니다.
var formData = new FormData($('#author_post')[0]);
formData.append('t','author-add');
$.ajax({
type: 'POST',
url: 'url-here',
cache: false,
processData: false,
contentType: false,
data:formData,
success: function(response) {
//success code
}
});
다음은 작업 샘플 코드입니다.
let formData = new FormData($("#formId")[0]);
$.ajax({
url: "/api/v1/save-data",
type: "POST",
enctype: "multipart/form-data",
dataType: "json",
data: formData,
success: function(data) {
console.log(data);
},
cache: false,
contentType: false,
processData: false,
error: function() {
console.log("Error");
}
});
제 문제는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
});
이것도 원인입니다.jQuery 컬렉션을 구축한 경우(.map() 또는 이와 유사한 방법으로), .ajax()의 데이터에는 이 컬렉션을 사용하지 마십시오.아직 jQuery 개체이지 일반 JavaScript 배열이 아니기 때문입니다.플레인 js 배열을 가져오려면 및 에서 .get()을 사용하여 .ajax()의 데이터 설정에서 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/10324594/jquery-illegal-invocation
'programing' 카테고리의 다른 글
Angularjs:오류: [ng:areq] 인수 'HomeController'가 함수가 아닙니다. 정의되지 않았습니다. (0) | 2023.02.11 |
---|---|
React와 전단지를 결합하는 좋은 방법 (0) | 2023.02.11 |
ember.display 및 서버 (0) | 2023.02.11 |
수정하려면 useEffect 정리 함수의 모든 구독 및 비동기 작업을 취소합니다. (0) | 2023.02.11 |
Spring Security는 SecurityConfig를 사용해도 POST 요구를 차단합니다. (0) | 2023.02.11 |