我有两个函数可以进行$ .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
对象时才触发这些事件(ajaxStart和ajaxStop)。
但是,如果您使用回调参数(JSONP
)从其他域请求数据,则jQuery不使用XMLHttpRequest
,而是通过插入<script>
标记来实现。
这就是事件未触发的原因。
解决方法是,可以在$.getJSON
调用之前开始加载动画,并将其停止在function(data) {..
块内。