2009-12-06 2 views
0

이 질문은 YUI에만 국한된 것이 아니라고 생각합니다. 사용하고있는 JS 라이브러리이며 특정 답변이 도움이 될 것입니다.XHR (IO) 시리즈 요청이 성공한 경우에만 YUI3에서 함수를 호출하는 가장 좋은 방법은 무엇입니까?

기본적으로 페이지를로드 할 때 스크립트에서 Y.io를 사용하여 몇 개의 XHR을 실행하고 모두가 데이터를 성공적으로 반환하면 스크립트가 다음 단계로 이동하여 데이터를 조작하게합니다. 받았습니다.

나는이 작업을 수행하는 몇 가지 방법을 생각할 수 있지만 모두 조금 어색한 것처럼 보입니다. 누군가에게 더 좋은 제안이 있기를 바랍니다. 내 아이디어는 지금까지 :

  1. 원하는 모든 데이터를 하나의 JSON 응답으로 통합하므로 하나의 요청이 양호하면 계속 진행하십시오. (이것은 내가 가장 좋아하는 해결책이다).
  2. 첫 번째 Y.io 요청이 성공을 반환하고 다음을 호출하면 등등, 마지막 명령이 성공하면 모든 것이 성공했다는 것을 알게되고 스크립트의 다음 단계로 넘어갑니다.

더 좋은 아이디어가 있습니까? 나는 지금 어느 순간에도 나는 좋아하지 않지만, 나는 옵션 2에 기대고있다.

답변

2

Y.io 호출을 대기열에 넣을 필요는 없습니다. 한 번에 모두 보내고 모두 돌아올 때는 계속 이동하십시오.

var data = {}; 

function step(id, o, part) { 
    try { 
     data[part] = Y.Lang.JSON.parse(o.responseText); 

     if (data.a && data.b && data.c) { 
      processData(data); 
     } 
    } 
    catch (e) { 
     /* handle bad JSON, failure case */ 
    } 
} 

Y.io(a_url, { on: { success: step }, 'arguments': 'a' }); 
Y.io(b_url, { on: { success: step }, 'arguments': 'b' }); 
Y.io(c_url, { on: { success: step }, 'arguments': 'c' }); 
+0

감사합니다. 나는 이런 일이 가능할 것으로 기대하고있었습니다. – hora

1

모두 구현 장점이있다 :

  1. 이 방법은 전송 오버 헤드를 감소 트랜잭션의 양이 감소를
  2. 이 방법은 가능한 와이어를 통해 전송되는 데이터의 총량을 감소시키고 있도록하여 UI 지연 시간을 단축 클라이언트 측에서는 다른 요청이 대기열에있는 동안 더 빨리 작업 할 수 있습니다.

JavaScript는 이러한 방법 중 하나에 적합합니다. 첫 번째는 곧장 앞으로, 두 번째는 콜백을 연결하여 수행 할 수 있습니다.

데이터를 나중에 처리하는 것이 더 빨리 시작해야하는 경우 두 번째 방법이 좋습니다. 처리하기 전에 모든 데이터가 필요한 경우 첫 번째 방법이 필요합니다. 그것은 모두 당신의 상황에 달려 있습니다. 일반적으로 스윙 할 수 있다면 두 번째 방법 (하나의 큰 응답과 반대되는 multipart)이 바람직합니다.

+0

많은 데이터를 보내지는 않지만 두 번째 방법은 부품을 별도로 처리 할 수 ​​있기 때문에 두 번째 방법이 더 좋습니다. 감사합니다. – hora

관련 문제