4

我有两个调用 $.getJSON 的函数——一个查看存储在服务器上的 JSON,另一个调用 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 只有在内部使用对象时才会触发这些事件(ajaxStartajaxStop )。XMLHttpRequest

但是,如果您使用回调参数 ( 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 回答