it-source

JQuery: '잡히지 않은 유형 오류:ajax 요청 시 잘못된 호출' - 여러 요소

criticalcode 2023. 2. 25. 21:22
반응형

JQuery: '잡히지 않은 유형 오류:ajax 요청 시 잘못된 호출' - 여러 요소

A와 B의 두 가지 선택 요소가 있습니다. A의 선택 옵션이 변경되면 그에 따라 B의 옵션을 업데이트해야 합니다.A의 각 요소는 B의 여러 요소를 의미하며, 일대다 관계입니다(A는 국가를 포함하고 B는 특정 국가에 위치한 도시를 포함해야 합니다).

함수do_ajax는 비동기 요구를 실행해야 합니다.

function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

B의 옵션을 업데이트하기 위해 A의 Function Call에 Function Call을 추가했습니다.onChangeevent. onChange 이벤트가 발생했을 때 실행되는 함수는 다음과 같습니다.A)가 트리거 됩니다.

function my_onchange(e) // "e" is element "A"
{
    var sel_B = ... ; // get select element "B"

    // I skipped some code here
    // ...

    var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
    };
    do_ajax(city_sel, data, 'ajax_handler.php');
}

}

JQuery 문서에서 읽은 바로는data는 배열(키 값 쌍)일 수 있습니다.다음과 같이 입력하면 오류가 발생합니다.

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

대신 데이터가 문자열인 경우에는 다음 오류가 발생하지 않습니다.

var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];

그러나 나는 내 서버측 php 코드에 있는 변수의 "array version"이 필요합니다.

Uncaught TypeError: Illegal invocation모두 압축된 "jquery-1.7.2.min.js" 파일에 있기 때문에 에러가 발생한 코드를 알 수 없었습니다.

데이터를 연관 배열로 받아들이도록 코드를 변경할 수 있는 설정이 있습니까?

사프라즈와의 대화 덕분에 해결책을 찾을 수 있었다.

문제는 그 값 대신 HTML 요소를 전달하고 있었다는 것입니다.그것은 실제로 제가 하고 싶었던 것입니다(실제로 제 php 코드에서 저는 그 값을 쿼리하기 위한 외부 키로서 필요로 합니다).cities테이블과 필터의 올바른 엔트리를 참조해 주세요.

즉, 다음과 같은 것이 아니라

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

다음 중 하나여야 합니다.

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex].value
};

주의: Jason Kulatunga의 답변을 확인하십시오.JQuery 문서를 인용하여 HTML 요소를 전달하면 문제가 발생하는 이유를 설명합니다.

Ajax 콜을 올바르게 설정하지 않았기 때문에 FormData 객체를 게시할 때 이 오류가 발생했습니다.아래의 셋업으로 문제가 해결되었습니다.

var myformData = new FormData();        
myformData.append('leadid', $("#leadid").val());
myformData.append('date', $(this).val());
myformData.append('time', $(e.target).prev().val());

$.ajax({
    method: 'post',
    processData: false,
    contentType: false,
    cache: false,
    data: myformData,
    enctype: 'multipart/form-data',
    url: 'include/ajax.php',
    success: function (response) {
        $("#subform").html(response).delay(4000).hide(1); 
    }
});

jQuery 문서:processData:

프로세스 데이터 부울
디폴트: true
기본적으로는 데이터 옵션에 개체로 전달된 데이터(기술적으로는 문자열 이외)는 처리되어 쿼리 문자열로 변환되며 기본 컨텐츠 유형인 "application/x-www-form-urlencoded"에 적합합니다.DOMDocument 또는 기타 처리되지 않은 데이터를 보내려면 이 옵션을 false로 설정하십시오.

출처 : http://api.jquery.com/jquery.ajax

이 제품을 사용해야 할 것 같습니다.processData서버에 데이터를 보내거나 querystring 부호화 파라미터를 지원하도록 php 스크립트를 변경합니다.

JQuery 문서에서 데이터가 배열(키 값 쌍)일 수 있다고 읽은 적이 있습니다.다음과 같이 입력하면 오류가 발생합니다.

이것은 배열이 아닌 객체입니다.

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

다음과 같은 경우가 있습니다.

var data = [{
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
}];

에도 같은 이 문제를 했습니다.traditional: true,

이 문제를 해결하려면 다음 절차를 따르십시오.

$.ajax({
   url: 'https://your-api-endpoint',
   type: 'post',
   data: new formData(this),
   processData: false,
   contentType: false,
   success: function(response) {
      console.log(response)
   }
})

processData: false 및 content를 사용해야 합니다.입력: false, 이 두 줄.당신의 문제는 해결될 거예요.

저는 같은 문제를 받고 있었고, 다음과 같이 수정할 수 있었습니다.

var formData = new FormData(document.getElementById('form_id'));
                                
$.ajax({
  type: 'POST',
  url: '/Settings/de_acc',
  data: formData,
  cache: false,
  contentType: false,
  processData: false,
  success: function(res){
    console.log(res);
  }
})

★★★illegal invocation$.getJSONundefined의 값중data fixing. 오류를 한 수정오류를 해결했습니다.

function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: mydata,
        **contentType: false,
        processData: false**
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}

아약스 JSON의 JSON입니다.「」를 사용합니다.JSON.stringify()문제를 해결할 수 있습니다.다음과 같이 합니다.

function do_ajax(elem, mydata, filename)
{
    $.ajax({
        url: filename,
        context: elem,
        data: JSON.stringify(mydata), //Here's the change
        datatype: "html",
        success: function (data, textStatus, xhr) {
            elem.innerHTML = data;
        }
    });
}
$.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });

시험:

            $.ajax({
                    url:"",
                    type: "POST",
                    data: new FormData($('#uploadDatabaseForm')[0]),
                    contentType:false,
                    cache: false,
                    processData:false,
                    success:function (msg) {}
                  });

언급URL : https://stackoverflow.com/questions/11071100/jquery-uncaught-typeerror-illegal-invocation-at-ajax-request-several-eleme

반응형