programing

jQuery - 잘못된 호출

javaba 2023. 2. 11. 17:35
반응형

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;
});

삭제하면dataajax 콜에서 동작합니다.좋은 의견이라도 있나?

감사합니다.

다음과 같이 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

반응형