sourcecode

jQuery에서 processData를 false로 설정하면 AJAX 요청이 중단됨

copyscript 2023. 8. 7. 22:53
반응형

jQuery에서 processData를 false로 설정하면 AJAX 요청이 중단됨

나는 지금 잠시 동안 구글을 검색했고 오직 무엇을 찾을 수 있습니다.processData: false그렇습니다. 이와 같은 문제를 경험한 사람을 찾을 수 없습니다.

JSON을 서버로 다시 전달하고 있으며 jQuery가 데이터를 쿼리 문자열로 자동 변환하는 것을 원하지 않으므로 processData를 false로 설정합니다.processData를 꺼내면 요청이 실행되는 것을 볼 수 있지만, 입력하자마자 (Firebug & Chrome 개발 도구를 사용하여) 요청이 실행되는 것을 볼 수 없습니다.

$.ajax({
            url: myUrl,
            type: "POST",
            data: {foo: "bar"},
            processData: false,
            contentType: 'application/json'
        });

처음에 제가 했던 요청은 이것보다 조금 더 복잡했지만 문제를 좁히기 위해 단순화했지만 이 간단한 코드도 작동하지 않습니다(다시 말하지만, 프로세스 데이터를 주석 처리하면 작동합니다).또한 콘솔에 JavaScript 오류가 없습니다.

편집

미래의 웹 검색자를 위해: 언젠가 한 사람이 지적했듯이, JS 개체나 잘못된 형식의 JSON 문자열을 제공해도 jQuery는 어떠한 오류도 발생시키지 않습니다.요청을 실행하지 않습니다.

데이터를 JSON으로 전달하려고 합니다.Javascript 개체를 전달하고 있습니다.JSON은 Javascript 객체를 문자열로 직렬화하여 호환성 문제 없이 전달할 수 있도록 하는 방법입니다.

실제로 문자열에서 JSON을 전달하려고 합니다.

$.ajax({
    url: myUrl,
    type: "POST",
    data: '{"foo": "bar"}',
    processData: false,
    contentType: 'application/json'
});

정말로.processData기본적으로 다음과 같이 가정합니다.data전달된 개체는 다음과 같이 전송됩니다.application/x-www-form-urlencoded.

위에서 @lone someday 및 @vsm에서 언급한 모든 내용을 요약하여 원시 JSON( 데이터와 다른 점)을 전송하면 다음과 같은 작업이 필요합니다.

$.ajax({
    url: 'http://here-i.am/send-me/an/angel', // Determining far end
    data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object
    processData: false, // Preventing default data parse behavior
    contentType: "application/json" // Setting proper `ContentType` for our data
    ...
});

그림 현재 이해 내용을 추가합니다(몇 시간 후).

  • ProcessData = true : 개체의 이름 값 쌍을 URL 인코딩으로 변환하거나 배열의 개체를 이름 값 쌍으로 변환하거나 문자열을 리터럴로 사용합니다.
  • ProcessData = false: 문자열을 리터럴로 사용하거나 개체의 ToString() 메서드를 호출합니다.

ProcessData = true 위에 '추가' 플래그를 설정하면 복잡한 구조를 캡처하는 재귀 인코딩 또는 플랫 이름 값 쌍 목록을 사용하여 이 플래그를 보낼 수 있습니다.

따라서 OP와 관련하여 기본값이 true이므로 processData를 지정하지 않고 작동했습니다.그래서 개체의 이름 값 쌍을 URL 인코딩 형식으로 변환했습니다.줄을 다시 추가하면 개체의 toString() 메서드가 호출됩니다.toString() 메서드에 의해 반환되는 URL 인코딩 문자열이 없기 때문에 "[ObjectObject]"와 같은 문자열이 표시됩니다.jQuery는 URL 인코딩되지 않은 문자열을 보낼 수 없거나 상속된 toString() 메서드를 사용하지 않을 수 있습니다.

제시된 두 솔루션은 객체를 JSON 문자열로 변환하므로 처리가 없으므로 processData는 아무것도 수행하지 않습니다.그 내용은유형 설정은 서버가 전송되는 내용을 이해하는 데 도움이 됩니다.

또한, 한 사람은 처리 과정에서 인코딩된 속성이 URL에 추가된다고 언급했습니다.GET는 URL에 추가되는 것을 의미하며 POST는 URL 인코딩된 http 본문을 의미합니다.

언급URL : https://stackoverflow.com/questions/6253256/setting-processdata-to-false-in-jquery-breaks-my-ajax-request

반응형