2010-12-11 3 views
34

어느 것이 언제 사용되어야하는지. http://api.jquery.com/에 대한 설명서에서 jquery :: ajaxStop()와 jquery :: ajaxComplete()

: ajaxStop를 들어

()는 말한다 :

설명 : 모든 Ajax 요청이 완료 될 때 호출되는 핸들러를 등록합니다. 이것은 Ajax 이벤트입니다.

설명 : 핸들러를 등록하는 것은 때 Ajax 요청이 완료 호출 할

그리고 ajaxComplete()는 말한다위한

. 이것은 Ajax 이벤트입니다. 모든 ajaxComplete 핸들러에 관계없이 Ajax 요청이 완료 있었는지의 호출

: 나는 ajaxComplete를 볼 수있는에서

는()로 인해 더 유연하다. 요청을 구분해야하는 경우 처리기에 전달 된 매개 변수를 사용할 수 있습니다. ajaxComplete 처리기가 실행될 때마다 이벤트 객체, XMLHttpRequest 객체 및 요청 생성에 사용 된 설정 객체가 전달됩니다.

누군가가 무엇을 위해 무엇 각각을 설명하고 적절한 사용법을 설명 할 수 있습니까? 최근에 작성한 애플리케이션에서 ajaxStop()을 사용하여 아약스 호출이 완료되면 실행했습니다. 그런 다음 서버 측 작업 결과에 대해 반환 된 데이터를 구문 분석합니다. 이제는 여러 상황에서 ajaxComplete()를 대신 사용하거나 두 가지를 조합하여 사용해야하는지 궁금해지기 시작했습니다.

의견을 보내 주시면 감사하겠습니다.

+0

나는 왜 'ajaxComplete는 함수가 아니다'라는 오류가 발생하는지 알 수 없었다. jQuery의 '슬림'버전을 사용하지 마십시오. https://stackoverflow.com/a/35424465/470749 – Ryan

답변

54

글쎄, 짧은 버전은 다른 용도로 제공되기 때문에 "다양한 상황에 모두 적용"옵션이 될 것입니다. 기본 규칙은 다음과 같습니다

  • .ajaxComplete()은 - 당신이 각 요청/결과에 뭔가를 할 때 모든 요청을 완료 동안 실행이를 사용합니다. 구문 분석 된 데이터는 인수 중 하나가 아니기 때문에 (오류가 있어도 실행됩니다) success 처리기를 대체하지 않습니다. 대신 요청 별 상황에서는 .ajaxSuccess()을 원할 수 있습니다.
  • .ajaxStop() - 요청이 일괄 처리 될 때마다 이 실행될 때 일반적으로 .ajaxStart()과 함께 사용하면 일종의 '로드 중 ...'표시기 표시/숨기기와 같은 작업을 수행하거나 다른 작업을 한 번 수행 할 수 있습니다. 마스터 마지막 ​​단계처럼 AJAX 요청의 배치가 완료됩니다.

당신이 당신의 데이터를 구문 분석하려면이 옵션을 사용하는 경우는,이 ​​경우 $.ajaxSetup(), 당신은 이미 구문 분석 된 데이터를 가져옵니다 success 핸들러를 지정할 수있는, 아마도 더 나은 방법이있다 (예를 들어, JSON 응답은 객체가 될 것이다) , 이렇게 :

$.ajaxSetup({ 
    success: function(data) { 
    //do something with data, for JSON it's already an object, etc. 
    } 
}); 
+0

아약스 성공 사례가 있습니다. 언제 ajaxStop을 사용해야합니까? – Chris

+8

@Chris -'.ajaxStop()'은 일괄 처리 요청이 완료되면 실행됩니다. 즉, 실행 순서가 무엇이든 상관없이 5 번째 요청이 완료되면 실행되므로 결과를 기다리는 AJAX 요청은 없습니다 그 시점에서, 당신은 끝났습니다. 이것은 완료된 특정 요청에 대한 정보를 가지고 있지 않다는 것을 의미합니다. 왜냐하면 요청에 대한 것이 아니기 때문입니다. 'ajaxComplete'는 각 요청에 대해'XMLHttpRequest' 객체를 사용하여 처리합니다 ... 그래서 당신은 처리 할 요청에 대한 정보를 가지고 있습니다 ... 그것은 모두 여러분이 실제로 무엇을하고 있는지에 달려 있습니다 . –

+0

감사합니다. – Chris

7

ajaxComplete은 AJAX 요청이 완료 될 때마다 성공적으로 또는 오류와 함께 호출됩니다.

ajaxStop모두 아약스 요청이 완료되면 호출됩니다. 따라서 ajaxComplete과 달리 진행중인 요청이 아직 있으면 호출되지 않습니다.

모든 Ajax 요청에 대해 수행하려는 작업을 수행해야하는 경우 첫 번째 항목을 사용해야합니다.

3

일반적으로 ajaxComplete을 사용하려고합니다. ajaxStop은 다시 돌아 오기를 기다리는 AJAX 요청이 더 이상 없을 때만 트리거되기 때문입니다. 한 번에 하나의 아약스 요청을 보내는 경우에는 별다른 차이가 없을 수도 있지만 요청 A를 보낸 후에 네트워크가 느려지는 것을 상상해보십시오. 요청 B가 5 초 후에 전송되면 요청 A보다 일찍 돌아옵니다. . 그러면 ajaxStop은 요청 A가 반환 된 후에 한 번만 트리거되고 ajaxComplete은 두 번 모두 실행됩니다.

ajaxStop을 사용하는 상황은 한 번에 여러 개의 아약스 요청을 보내는 경우입니다. 예 : 일련의 3 가지 양식을 제출하고 ... 3 번 모두 성공적으로 완료되면 통보 받기를 원합니다. 물론 카운터에서 동일한 기능을 구현할 수 있습니다. ajaxComplete

그러나 질문의 ​​소리를 통해 ... 각 Ajax 응답의 데이터를 구문 분석하고 싶습니다. 일반적으로이 작업은 아약스 성공 콜백

$.ajax({ 
    url: "blah", 
    data: "blah", 
    success: function (data) { /* Code in here */ } 
});