2012-04-29 16 views
4

私は$ .getJSON呼び出しを行う2つの関数を持っています.1つはサーバーに保存されているJSONを調べ、もう1つはFlickrを呼び出します。

私はこれを持っている:

$ .getJSONはいくつかの特定のパスで呼び出されたときに動作しますが、$ .getJSONがFlickrに呼び出しを行うときにアラートを生成しません
$(document).ajaxStart(function(){ 
     alert('requeststart'); 
     //$('#loading').show(); 
    }); 

。 Flickrコールは機能し、すべてがロードされるはずです...しかし、ajaxStartは起動しません。 (私はajaxStartとajaxStopを使用してロードGIFを表示しています)

アイデア?ここで

は、Flickrのを呼び出す関数である:それは内部的にXMLHttpRequestオブジェクトを使用している場合

$('#submit').on("click", function (evt) { 
    evt.preventDefault(); 
    var tag = $('input').val(); 
    if (tag == "") { 
     alert("please enter a tag"); 
    } 
    else { 
     $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",{tags: tag, tagmode: "any", format: "json" }, 
     function(data) { 
     $.each(data.items, function(i,item){ 
      var name = names[index]; 
      $("#" + name).empty(); 
      $('<img src="' + item.media.m.replace("_m.jpg", ".jpg") + '" />').appendTo("#" + name); 
      $('<a href="' + item.link + '"> ' + item.title + '</a>').appendTo("#" + name); 
      index ++; 
      if (i==5) { 
       index = 0; 
       }  
     }); 
     }); 
    } 
}); 
+0

[jsfiddle](http://jsfiddle.net/)がいいと思います。 – jli

答えて

6

jQueryがイベントのみ(ajaxStartajaxStop)を発生させます。

ただし、コールバックパラメータ(JSONP)を使用して別のドメインからデータを要求する場合、jQueryはXMLHttpRequestを使用せず、代わりに<script>タグを挿入することで実現します。

これは、イベントが発生しない理由です。


回避方法として、 $.getJSONコールの直前に読み込みアニメーションを開始し、 function(data) {..ブロック内で停止させることができます。

0

複数のリクエストについては、個別にカウントする必要があります。私はこのようにそれをやった:1による

var loader = 0;  
function showloader(cnt){ 
    loader = loader + cnt; 
    if(loader < 1) { 
     $('#loading').hide(); 
     } else { 
     $('#loading').show(); 
     } 
} 

増加と$.getJSON前にそれを呼び出すと、その行われたときに再び火を減らします。 like:

showloader(1); 
$.getJSON( 
    [...] 
}).done(function() { 
    showloader(-1); 
    [...] 
}); 
関連する問題