我有两个函数可以进行$ .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;
                }
        });
      });
    }
});

最佳答案

jQuery仅在内部使用XMLHttpRequest对象时才触发这些事件(ajaxStartajaxStop)。

但是,如果您使用回调参数(JSONP)从其他域请求数据,则jQuery不使用XMLHttpRequest,而是通过插入<script>标记来实现。

这就是事件未触发的原因。

解决方法是,可以在$.getJSON调用之前开始加载动画,并将其停止在function(data) {..块内。

09-27 01:07