4

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

私はこれを持っています:

$(document).ajaxStart(function(){ 
        alert('requeststart');
        //$('#loading').show(); 
    });

これは、$.getJSON が特定のパスで呼び出されたときに機能しますが、$.getJSON が Flickr を呼び出したときにアラートを生成しません。Flickr 呼び出しが機能し、すべてが正常に読み込まれます... ただし、ajaxStart は起動しません。(私はajaxStartとajaxStopを使ってloading-gifを表示しています)

何か案は?

Flickr を呼び出す関数は次のとおりです。

$('#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;
                }       
        });
      });
    }
});
4

2 に答える 2

6

jQueryは、オブジェクトを内部で使用する場合にのみ、これらのイベント ( ajaxStartおよびajaxStopXMLHttpRequest ) を発生させます。

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

そのため、イベントは発生しません。


回避策として、呼び出しの直前にローディング アニメーションを開始し、ブロック$.getJSON内で停止することができます。function(data) {..

于 2012-04-30T00:44:55.040 に答える
0

複数のリクエストの場合は、それらを個別にカウントすることもできます。私はこのようにしました:

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

1ずつ増やして前に呼び出し$.getJSON、減らして、完了したら再度起動します。お気に入り:

showloader(1);
$.getJSON( 
   [...] 
 }).done(function() { 
   showloader(-1);
   [...]
});
于 2014-08-22T08:52:21.150 に答える