programing

jQuery AJAX 응답 대기 중

closeapi 2023. 9. 8. 21:31
반응형

jQuery AJAX 응답 대기 중

저는 jQuery.jax를 사용하여 100번(async: true)이라고 불리는 페이지가 있습니다. 문제는 모든 호출이 로드될 때 시스템이 100번의 호출이 모두 돌아올 때까지 기다려야 계속 진행할 수 있다는 것입니다.이 일을 어떻게 해야 합니까?

미리 감사드립니다! :)

업데이트:

이러한 통화는 for() 루프에서 이루어집니다. (그 중 100개가 있음:)

다음과 같이 사용할 수 있습니다.

$.when(
    $.ajax({/*settings*/}),
    $.ajax({/*settings*/}),
    $.ajax({/*settings*/}),
    $.ajax({/*settings*/}),
).then(function() {
    // when all AJAX requests are complete
});

또는 배열에 모든 AJAX 호출이 있는 경우 다음을 사용할 수 있습니다.

$.when.apply($, ajaxReqs);

여기에는 적어도 jQuery 1.5가 필요합니다.


배열에 AJAX 요청을 추가하려면 다음과 같은 작업을 수행합니다.

var ajaxReqs = [];
for (var i = 0; i < 100; i++) {
    ajaxReqs.push($.ajax({
        /* AJAX settings */
    });
}
$.when.apply($, ajaxReqs).then(function() {
    // all requests are complete
});

이런 종류의 문제는 데이터베이스 SQL 설계의 모든 부분에서 발생합니다. 비록 완전히 동일하지는 않지만, 이 문제는 바로 네트워크 통신입니다.

제대로 하지 않으면 다시 물어뜯기 때문에 주의해야 합니다. 즉, 사용자는 기다려야 하는 것에 심한 짜증을 낼 것입니다.아무리 강조해도 지나치지 않습니다.

시나리오는 이렇습니다.요청 시 서버에서 많은 작은 정보 조각을 전송하려고 합니다.각 요청은 효율적으로 작동하는 여러 요인에 따라 달라집니다.이 모든 것들은 당신이 통제할 수 없는 것들입니다.

Wide area Network reposnse time (anywhere in the world right?)
Locak area Network reposnse time (anywhere in the building)
WebServer Load
WebServer Response time
Database response time
Backend Script run time
Javascript run time to process the result
The fact that the browsers are generally limited to 6-8 parallel AJAX requests at once (I think - someone correct me on the exact number)

요청에 곱하기(음...)고객님의 경우 x 100)

이제 뭔가 그림이 보이세요?

로컬 기계에서 테스트해보면 더없이 잘 작동할 수 있습니다.심지어 같은 컴퓨터에서 자신의 DB와 웹 서버를 실행하고 있을 수도 있습니다.하지만 그것을 야생에서 시도해 보면 곧 신뢰할 수 없는 문제를 겪게 될 것입니다.

들어보세요, 가장 간단한 방법은 모든 매개변수를 하나의 JS 배열로 정리해서 한 번의 포스트 요청으로 보내는 것입니다.그런 다음 서버에서 모든 데이터베이스가 응답을 선택하고 하나의 JSON/XML 응답으로 롤업합니다.

그 시점에서 당신은 오직 하나의 AJAX 응답만을 기다리고 있을 뿐입니다.JSON/XML 결과에서 모든 데이터를 찾을 수 있습니다.

100개의 요청을 처리하는 것을 고려하면 스톱워치로 실제로 시간 절약을 측정할 수 있을 것입니다!

네트워크 요청을 가능한 적게 하는 것을 제가 받아들이세요.

Depended object api를 사용할 수 있습니다.$.ajax가 지연된 개체를 반환하는 한 루프를 사용하기 위해 다음 코드를 시도할 수 있습니다.

var ajaxes = [];
for (i = 1; i < 100; i++) {
  ajaxes[i] = $.ajax({/*data*/});
}

$.when.apply( ajaxes )
   .then(function(){
      console.log( 'I fire once all ajax requests have completed!' );
   })
   .fail(function(){
      console.log( 'I fire if one or more requests failed.' );
   });

추신. jQuery 1.5에서 이연을 사용한 에릭힌즈의 이연된 객체 사용에 대한 좋은 기사가 있습니다.

아약스 100통?매우 이상한 요구 사항이며, 다른 방법을 사용하여 달성하고자 하는 목표를 달성할 수도 있습니다.

vari = 0;
함수 myCallback() {alert('100회 완료');
}
함수 doAjax() {$.208url: 'blah.june',데이터: 'hello=world',성공: 함수(응답) {i++;},complete: 함수 {if(i < 100) {doAjax();} 기타 {내 콜백();}}});}
doAjax(); // start

저는 JS 남자는 아니지만 전역 변수를 만들고, 이것이 카운터가 될 것이고, 이 전역 변수가 100에 도달했는지 아닌지를 주기적으로 확인할 수 있는 시간 함수를 정의할 것입니다.

EDIT: setTimeout()

언급URL : https://stackoverflow.com/questions/6250022/waiting-for-jquery-ajax-responses

반응형