계속하기 전에 스크립트가 Ajax 받기 요청의 상태를 기다리게합니까?

StackOverflow https://stackoverflow.com/questions/2431567

  •  19-09-2019
  •  | 
  •  

문제

기본적으로 내가하고있는 일은 객체의 존재를 확인하는 것입니다. 객체가 발견되지 않으면 스크립트는 getScript를 사용하여 소스 파일을로드하려고합니다. 나는 이것을 한 번만 확인하고 싶지만 fetch ()를 호출하는 함수로 true 또는 false를 반환합니다.

  fetch:function(obj){
      ...
        isReady = false;
   $.getScript(obj.srcFile,function(){

    isReady=true;
    warn("was able to load object "+key);

   });

   return isReady;

   }

그러나 스크립트로드 =/ 전에 반환이 시작됩니다.

나중에 스크립트가로드되었지만 함수는 False를 반환했습니다.

이것은 내가 생각하는 비동기의 아름다움입니다 ...

이것을 처리하는 가장 좋은 방법은 무엇입니까 ... 아마도 객체가 존재하는 경우 다른 시점에서 다시 확인할 수 있습니까?

아니면 브라우저를 잠재적으로 잠글 필요가없는 곳 에서이 작업을 수행하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

코드 구성에서 나는 당신이 당신의 방법을 포함하기 위해 객체를 사용하고 있다고 생각합니다. 그렇다면 다음과 같은 사용자 정의 이벤트를 사용할 수 있습니다.

var thing = {
    fetch: function(obj){
        var self = this;
        if (obj.isReady){
            self.trigger('ready', [obj]);
            return;
        }
        $.getScript(obj.srcFile,function(){
            obj.isReady = true;
            self.trigger('ready', [obj]);
        });
    }   
};

thing.bind('ready',function(e, obj){
    // do what you need to do when the object exists here
});
var obj = {};
thing.fetch(obj);

다른 팁

보다 jQuery.ajax (): 만들다 async 거짓.

기본적으로 모든 요청은 비동기식으로 전송됩니다 (즉, 기본적으로 true로 설정됨). 동기 요청이 필요한 경우이 옵션을 False로 설정하십시오. 동기 요청은 요청이 활성화되는 동안 작업을 비활성화하여 브라우저를 일시적으로 잠글 수 있습니다.

fetch:function(obj){
 isReady = false;
 $.getScript(obj.srcFile,function(script_data){

  isReady=true;
  warn("was able to load object "+key);
  if ( typeof( script_data ) != 'undefined' ) {
     return isReady;
  }

  });


 }

콜백 함수 내부의 값을 반환해야합니다. 그렇지 않으면 요청을 시작한 다음 바로 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top