2010-11-30 4 views
14

난 그냥 jQuery의 동기 아약스 통화에 대한 또 다른 질문을 읽고 있었다, 나는 궁금에 도착 :동기식 Ajax는 언제 사용하면됩니까?

은 어떤 상황이 아약스 호출의 동기 버전/도움이 필요하게?

이상적으로 저는 예제가 좋을 것입니다. 동기가 표준 아약스보다 나은 이유는 무엇입니까?

+0

IMHO 절대 :-) 나는 어떤 상황에서도 "유효한 해결 방법"을 찾지 못하는 것에 대해 좋은 논쟁을 발견하지 못했다. 그러나 나는 여기에있는 사람들이 틀린 것을 증명할 수 있다고 확신한다. – wajiw

+1

나는 귀하의 질문은 논리적 인 모순입니다. –

+2

@Nathan Taylor 나는 AJAX가 jQuery에서 잘못된 이름이라는 것을 언급하는 것으로 생각했다. 그것은 sync 또는 async, xml, json, html, 또는 무엇이든 될 수 있습니다. 다른 언어에서는 일반적으로 "URL 요청"이라고합니다. 우리가 그렇게 부른다면, 외부의 정보가없는 사람들은 새로운 의미없는 윙윙 거리는 말을 던지지 않을 것입니다. – zzzzBov

답변

20

I (즉, 다른 방법으로 해결할 수없는) 당신이 필요이 동기로, 또는 페이지가 이동하고 요청이 곳, window.onbeforeunload에 전화를하고있다 생각할 수있는 유일한 합리적인 예 결코 완료하지 마십시오.

표준/비동기 동작을 사용하는이 특별한 경우에는 요청이 너무 일찍 종료되어 서버에 접속하지 못할 수도 있습니다.

나는이 일을 선호한다고 말하지 않고, 그 반대의 경우 (사용자의 검색 속도에 부정적인 영향을 미침). 하지만 ... 여기에는별로 선택의 여지가 없습니다.

+0

이전 작업에서 추적 코드를 테스트 할 때 관찰 한 내용에 따라 몇 가지 버전 (지금까지 2 ~ 3 년 전)으로 Chrome이 'onbeforeunload'의 비동기식 AJAX를 몇 초 동안 제공했다고 생각합니다. 페이지가 백그라운드에서 이미 언로드되었습니다. 나는 다른 브라우저가 한 벌을 따라 왔는지는 모르지만, 아마 언젠가는이 대답이 쓸모 없게 될 것이다. –

-4

저는 아약스 전화를하고 싶지만 다른 전화의 결과에 의존하는 전화가있는 시나리오에서는 좋을 것이라고 추측합니다. 동 기적으로 수행하는 경우 종속 호출이 시작되기 전에 독립적으로 완료 될 때까지 기다릴 수 있습니다.

+1

-1 , 비동기 호출은 순차적 인 순서로 발생하도록 쉽게 대기 할 수 있습니다. 일반적으로 [Promises] (http://en.wikipedia.org/wiki/Futures_and_promises)는 이전 콜백이 성공했을 때 특정 순서로 각 비동기 콜백이 발생할 수 있도록 통과 실패 조건을 대기열에 넣는 데 사용됩니다. 또한 개별적으로 또는 그룹으로 콜백에 대한 오류 처리를 포함시키는 것이 쉽습니다. – zzzzBov

+1

약속이 없어도 간단한 콜백을 사용할 수 있습니다. – Brandon

-2

동기식 ajax는 클라이언트 측 코드의 처리를 계속 진행하는 데 필요한 서버에서 값을 검색하는 데 자주 사용됩니다. 이 경우 Ajax 호출은 원하는 값으로 호출이 반환 될 때까지 차단됩니다. 예 :

자바 스크립트 함수는 직원에 대한 급여를 계산해야합니다 : 1 단계는 : 양식 2 단계에서 직원 ID를 얻을 : 월급/시간 STEP3를 얻기 위해 emp.id을 통과하는 동기화 서버 전화를 걸 : 곱셈 당신이 볼 수있는 서버 호출이 jQuery를 사용하는 경우, 하나는 비동기 적으로 급여를 계산하기는 onSuccess을 처리 할 수 ​​있지만, 그래서 이것은, 동기화 기능을해야 완성하지만,하지 않는 한, 총 급여가 계산 될 수없는 노동 시간

의 수에 의하여 급여 비율 급여를 표시하는 메시지 상자가있는 경우 처리가 계속되며 비어있는 것으로 나타납니다.

+2

죄송합니다. 그러나 이것은 완전히 잘못되었으므로 오해하지 마십시오. 언급 한 경우 콜백 및/또는 약속을 사용할 수 있습니다. AJAX와는 아무런 관련이 없습니다. JS가 그 사이에 뭔가 처리 할 수 ​​있다면? AJAX를 동기화하면 탭이 고정됩니다. – ducin

+1

동의, 이는 잘못된 조언입니다. 이것이 콜백이 존재하는 이유입니다. 이 경우 동기화 AJAX는 콜백 작성을 피하기위한 쉽고 빠른 해결 방법입니다. – Brandon

+0

@Brandon 그리고 매우 많은 수의 중첩 콜백을 가지고 있고, * look * synchronous를 요구하는 함수를 가지고있을 때, 비동기 적으로 작동하도록 노력하고 있습니다. – Michael