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 호출에서 제거 하면 작동합니다 .. 어떤 제안?
감사!
데이터 값으로 문자열이 필요하다고 생각합니다. To & From Objects를 올바르게 인코딩 / 직렬화하지 않는 jQuery 내부의 무언가 일 수 있습니다.
시험:
var data = {
from : from.val(),
to : to.val(),
speed : speed
};
라인에도주의하십시오 :
$(from).css(...
$(to).css(
To & From이 이미 jQuery 객체이므로 jQuery 래퍼가 필요하지 않습니다.
설정하려고 processData를 : 거짓을 같은 아약스 설정에서
$.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를 사용하여 양식을 제출 하려면 아래 두 가지 옵션을 설정해야합니다.
processData: false,
contentType: false
You can try as follows:
//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');
}
}
});
});
In my case, I just changed
Note: This is in case of Django, so I added csrftoken
. In your case, you may not need it.
Added
contentType: false
,processData: false
Commented out
"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) => {
}
})
to
$.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) => {
}
})
and it worked.
In My case I have't define all variables which I am passing to data in ajax.
var page = 1;
$.ajax({
url: 'your_url',
type: "post",
data: { 'page' : page, 'search_candidate' : search_candidate }
success: function(result){
alert('function called');
}
)}
I have just defined variable var search_candidate = "candidate name";
and its working.
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');
}
)}
My problem was unrelated to processData
. It was because I sent a function that cannot be called later with apply
because it did not have enough arguments. Specifically I shouldn't have used alert
as the error
callback.
$.ajax({
url: csvApi,
success: parseCsvs,
dataType: "json",
timeout: 5000,
processData: false,
error: alert
});
See this answer for more information on why that can be a problem: Why are certain function calls termed "illegal invocations" in JavaScript?
The way I was able to discover this was by adding a console.log(list[ firingIndex ])
to jQuery so I could track what it was firing.
This was the fix:
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
});
참고URL : https://stackoverflow.com/questions/10324594/jquery-illegal-invocation
'development' 카테고리의 다른 글
Python 모듈 os.chmod (file, 664)는 권한을 rw-rw-r로 변경하지 않지만 -w--wx ---- (0) | 2020.08.24 |
---|---|
dplyr을 사용하여 각 그룹에서 최대 값을 가진 행을 선택하는 방법은 무엇입니까? (0) | 2020.08.24 |
Stackpanel에 ScrollBar를 추가하는 방법 (0) | 2020.08.24 |
로컬 컴퓨터의 Windows 서비스가 시작된 후 중지됨 오류 (0) | 2020.08.24 |
오류 : 모듈 파일의 최소 배포 대상은 ios8.3 v8.3입니다. (0) | 2020.08.24 |