2011-01-07 9 views
7

내 사이트에는 페이지가로드되는 즉시 다른 (보안 된) 서버에서 데이터를 검색하는 jquery 기능이 있습니다. JSONP 호출을 사용하여 나는 현재 문서 준비 이벤트 후이 데이터를로드 : 나는 위의 호출에 대해 좋아하지 않는 무엇jquery가 문서 준비 이벤트를 사용하지 않고로드되었는지 확인하십시오.

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
      initPage(data); 
     }); 
    }); 
</script> 

에서, JSONP 실제로하여 아래로 둔화, 문서 준비 이벤트 전에 exectued 할 수 있다는 것입니다 페이지로드. 내가 페이지 내 jQuery를 (즉, 스크립트 태그를 사용하여 참조하지 않음)을 포함한다면, 다음 코드는 페이지가로드 빨리 좋은 작품과 : 모든 페이지에서 JQuery와 포함

<script type="text/javascript"> 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     $(document).ready(function() { 
      initPage(data); 
     }); 
    }); 
</script> 

는하지만 '는 23K 오버 헤드 피하고 싶다. jquery가로드되었고 jquery가로드되었을 때 initPage() 함수 만 excecute하는지 테스트 할 수 있습니까?

편집 : 더 정확하게 jquery가로드 된 다음 이벤트를 실행하는 경우 반복적으로 확인해야합니다. 타이머 작업이 솔루션이 될 수 있습니다.

해결책 : jquery 검사를 수행하는 사전 작업을 만들었습니다. 내 페이지 로딩 속도가 빨라질 수 없습니다. :) 모두에게 감사드립니다!

function preInit() 
    { 
     // wait until jquery is loeaded 
     if (!(typeof jQuery === 'function')) { 
      window.setTimeout(function() { 
       //console.log(count++); 
       preInit(); 
      }, 10); // Try again every 10 ms.. 
      return; 
     } 
      $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', 
      function (data) { 
       $(document).ready(function() { 
        initPage(data); 
       }); 
      }); 
     } 

답변

5

나는 그냥 jQuery 오브젝트가 존재하는지

if (jQuery) { 
    ... 
} 

를 사용할 수 있습니다 생각합니다. 더 좋아

은 다음과 같습니다

if (typeof jQuery !== 'undefined') { 
    ... 
} 

또는

if (typeof jQuery === 'function') { 
    ... 
} 

편집 :

오버 헤드에 대해 또는 jQuery 오브젝트가로드되어 있는지 여부를 걱정하지 마십시오. 그냥이처럼 $(document).ready없이 코드를 실행 한 후 정기적 <script src="..."> 태그를 사용하여 jQuery 라이브러리를 포함하고있는 경우 :

<script type="text/javascript"> 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     initPage(data); 
    }); 
</script> 

이 작동합니다. $(document).ready 부분은 아직로드되지 않은 DOM 요소를 변경하려고 시도하기 전에 DOM이 완전히로드되었는지 확인하기위한 것입니다. Ajax 기능을 포함하여 jQuery 라이브러리 자체가 곧있을 것이다. 당신의 initPage(data) 호출이 내가이하는 가정 DOM을 사용하는 경우

이제, 당신이 다음과 같이 그에 체크를 넣어 수 :

<script type="text/javascript"> 
    function initPage(data) { 
     var $domObject = $('#your-dom-object'); 
     if ($domObject.length === 0) { // Dom object not loaded yet. 
      window.setTimeout(function() { 
       initPage(data); 
      }, 0); // Try again after other stuff has finished. 
      return; 
     } 
     // Do your regular stuff here. 
    } 
</script> 

을하지만, 나는이 될 것이라고 생각하지 않는다 대부분의 상황에서 필요합니다.

+0

그게 거의 그것. 하지만 실제로 얼마나 jquery를로드하는 데 걸릴지 모르겠다. jquery가로드 될 때까지이 검사를 반복해야합니다. 나는 매 10ms마다를 확인하는 시간을 만들 수있다. 그러나 그것은 기분이 좋지 않다 .. – AyKarsi

+1

아, 그게 무슨 뜻 이니? jQuery가 전혀로드되었는지 테스트하고 싶다는 뜻인 줄 알았는데. 이 경우 jquery가'

1

함수를 실행하는 스크립트 태그 위에 jQuery가 포함 된 스크립트 태그를 배치하면 정상적으로 작동합니다.

대신 준비 기능이 당신의 스크립트를 포장 도움이 될 수 있습니다 :

(function() { 
    // Your code here 
})(); 
+0

이것은 $ (document) .ready (function() {})와 동일합니다. 그냥 속기 버전. –

+0

jQuery를 포함하지 않고 문서를로드 할 때 함수를 실행하는 데이 메서드를 사용합니다. 나는 jQuery가이 기능을 변경한다는 것을 몰랐다. – Olical

+0

@Matt 그게'$ (function() {...});':) @ Wolfy87 이것은 코드를 캡슐 화하는 좋은 방법이지만,별로 변하지 않습니다. 그런 다음 다시 포스터가 완전히 바뀌어야한다고 생각하지 않습니다. –

0

당신은 추가하거나 완성 기능 또는 그리드 완성 기능을로드 할 수 있습니다 보여처럼 당신이있는 jqGrid

에 대한 몇 가지 작업을 수행하는 데 도움이 될 것입니다 그 이하
height : '550', 
    width : '787', 
    loadComplete : function() {} 
    gridComplete:function(){} 
0

안녕 내가 먼저 그

정의 JQuery와 당신이 사용하고자하는 방법입니다 여부를 확인해야한다고 생각

(! = '정의되지 않은'& & 대해서 typeof ($. 아약스)! = '정의되지 않은'대해서 typeof (jQuery를))는

0

{
// 코드는 여기
올 것이다}하면 어떻게 I 위의 호출에 대해 마음에 들지 마십시오 JSONP 문서 준비 이벤트

당신이 그것에 대해 확신하기 전에 실제로 exectued 할 수 있다는 것입니다! 당신은 여전히 ​​
난 당신이 사용해야 할 것 같아요 loading..etc 이미지가있을 수 있습니다 유의하시기 바랍니다 : 나는 footable jQuery 플러그인을 사용하고 있었다

$(window).load(function() { 
    $.getJSON(_secureHost + '/base/members/current.aspx?callback=?', function (data) { 
     initPage(data); 
    }); 
}); 

Link

+0

사실 나는 가능한 한 일찍 jsonp를 실행하고 싶습니다. 문서 준비가 완료되면 DOM이 조작 준비가됩니다. 제가 조작하기 전에 문서 준비를 존중하는 한, 좋습니다. – AyKarsi

0

. 이것은 나를 위해 일한 :

if ($.fn.footable) 
{...} 

JQuery와 버전 - 1.9.1 footable 버전 - 0.5

관련 문제