[javascript] 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에서 개발하고 동기식 ajax 요청을 만들지 않았거나 잘못된 위치에 스크립트를 정의하지 않은 경우 다른 원인을 찾았습니다.

해결책은 시계 방향을 가리키는 작은 새로 고침 아이콘으로 표시된 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콘솔 창에서와 같이 (여러) 스크립트 또는 스타일 시트가로드되는 것을 볼 때 이런 일이 발생한다는 것을 알고 있습니다. (firefox).


답변

이전 답변 중 어느 것도 내 상황에 적합하지 않았습니다. 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하면 경고 플래그가 발생 click()합니다. 함수로 호출하는 f2를 대체하여 문제를 해결했습니다 .

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


답변

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


답변

부분보기에서 스크립트를로드하면이 문제가

  1. 부분보기에서 스크립트를 제거하고 기본보기로 이동했습니다.

이 솔루션은 나를 위해 잘 작동합니다.