Programming

jQuery는 동기 XMLHTTPRequest를 더 이상 사용하지 않습니다.

procodes 2020. 7. 23. 21:12
반응형

jQuery는 동기 XMLHTTPRequest를 더 이상 사용하지 않습니다.


다른 많은 사람들과 마찬가지로 내 웹 사이트는 jQuery를 사용하고 있습니다. 개발자 도구를 열면 XMLHTTPRequest가

최종 사용자의 경험에 해로운 영향으로 인해 더 이상 사용되지 않습니다.

계속해서 설명서의 일부를 읽었 지만 상당히 기술적 인 내용이었습니다. 누군가 XMLHTTPRequest에서 WHATWG로 전환 한 결과를 간단한 용어로 설명 할 수 있습니까? 2012 년에 일어난 일이라고합니다.

또한 문서에는 작업자 외부의 Synchronous XMLHttpRequest가 웹 플랫폼에서 제거되는 중이라고 말합니다. 이러한 경우 사용자 에이전트가 서비스에 포함 된 경우 기존 코드를 수정해야합니까?


이 경고를 피하려면 다음을 사용하지 마십시오.

async: false

당신의 $.ajax()전화 중 하나에서 . 이 기능은 XMLHttpRequest더 이상 사용되지 않습니다.

기본값은입니다 async: true. 따라서이 옵션을 전혀 사용하지 않으면 기능이 실제로 제거 된 경우 코드가 안전해야합니다.

그러나 아마도 그렇지 않을 것입니다. 표준에서 제거 될 수는 있지만 브라우저는 몇 년 동안 계속 지원할 것이라고 확신합니다. 따라서 어떤 이유로 동기 AJAX가 정말로 필요한 경우 async: false경고를 사용 하고 무시할 수 있습니다 . 그러나 동기식 AJAX가 열악한 스타일로 간주되는 데는 충분한 이유가 있으므로 피할 수있는 방법을 찾아야합니다. 그리고 Flash 응용 프로그램을 작성한 사람들은 아마도 그것이 사라질 것이라고 생각하지 않았지만 지금은 단계적으로 폐지되고 있습니다.

Fetch대체 하는 API XMLHttpRequest는 동기 옵션도 제공하지 않습니다.


수락 된 대답은 정확하지만 Visual Studio 2013 이상을 사용하여 ASP.NET에서 개발 중이고 다른 위치에서 동기식 아약스 요청을하거나 스크립트를 정의하지 않은 경우 다른 원인을 발견했습니다.

해결책은 시계 방향을 가리키는 작은 새로 고침 아이콘으로 표시된 VS 도구 모음 드롭 다운에서 "브라우저 링크 사용"을 선택 취소하여 "브라우저 링크"기능을 비활성화하는 것입니다. 이 작업을 수행하고 페이지를 다시로드하면 경고가 중지됩니다!

브라우저 링크 비활성화

이것은 로컬에서 디버깅하는 동안에 만 발생하지만 경고의 원인을 아는 것이 좋습니다.


이것은 신체 섹션이 끝나기 직전에 헤드 외부의 외부 js에 대한 링크를 통해 나에게 발생했습니다. 아시다시피 다음 중 하나입니다.

<script src="http://somesite.net/js/somefile.js">

JQuery와 관련이 없습니다.

아마 다음과 같은 일을 할 것입니다.

var script = $("<script></script>");
script.attr("src", basepath + "someotherfile.js");
$(document.body).append(script);

그러나 나는 그 아이디어를 테스트하지 않았습니다.


@ henri-chan 이 주석으로 언급 했지만 더주의를 기울여야한다고 생각합니다.

jQuery / javascript를 사용하여 새 html로 요소의 컨텐츠를 업데이트 할 때이 새 html에 <script>태그 가 포함 되면 태그가 동 기적 으로 실행 되므로이 오류가 발생합니다. 스타일 시트도 마찬가지입니다.

XHR콘솔 창에서와 같이 (여러) 스크립트 또는 스타일 시트가로드 될 때이 문제가 발생한다는 것을 알고 있습니다. (파이어 폭스).


이전 답변 중 어느 것도 (정확한) 내 상황에 적합하지 않았습니다. async매개 변수를 사용 jQuery.ajax()하지 않으며 다음과 같이 반환되는 내용의 일부로 스크립트 태그를 포함하지 않습니다.

<div> 
     SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

내 상황은 두 개의 div를 동시에 업데이트하기 위해 두 개의 AJAX 요청을 연속적으로 호출하는 것입니다.

function f1() {
     $.ajax(...); // XMLHTTP request to url_1 and append result to div_1
}

function f2() {
     $.ajax(...); // XMLHTTP request to url_2 and append result to div_2
}

function anchor_f1(){
$('a.anchor1').click(function(){
     f1();
})
}

function anchor_f2(){
$('a.anchor2').click(function(){
     f2();
});
}

// the listener of anchor 3 the source of problem
function anchor_problem(){
$('a.anchor3').click(function(){
     f1();
     f2();
});
}

anchor_f1();
anchor_f2();
anchor_problem();

를 클릭 a.anchor3하면 경고 플래그가 발생합니다 .f2 호출을 click()기능 으로 대체하여 문제를 해결했습니다 .

function anchor_problem(){
$('a.anchor_problem').click(function(){
     f1();
     $('a.anchor_f2').click();
});
}

내 해결책 : 코드를 버퍼에 덤프하는 비동기 요청을 사용합니다. 매 초마다 버퍼를 검사하는 루프가 있습니다. 덤프가 버퍼에 도착하면 코드를 실행합니다. 또한 시간 초과를 사용합니다. 최종 사용자의 경우 페이지는 동기 요청이 사용되는 것처럼 작동합니다.

참고 URL : https://stackoverflow.com/questions/27736186/jquery-has-deprecated-synchronous-xmlhttprequest

반응형