beforeSend in $ .getJSON
如何在$.getJSON
(跨域)中使用$.getJSON
回调。
更具体地说, $.getJSON
调用是一个YQL服务
select * from html url =“ http://www.yahoo.com ”
beforeSend的唯一目的是获取原始XHR对象(通常用于在其上设置HTTP标头)。 你不需要它来踢开旋转器之类的东西。 这里的代码(来自@petersendidit):
jQuery.ajax({ url: url, dataType: "json", beforeSend: function(){ $('.loading').show(); } });
最好是这样写的:
$('.loading').show(); jQuery.ajax({ url: url, dataType: "json" });
这意味着,除非您需要jQuery.ajax中的任何高级选项,否则您使用jQuery.getJSON的原始计划就可以了。 所以你说你想要显示一个加载GIF,就这样做而忘记beforeSend
。
jQuery(".someSpinnerImage").show(); jQuery.getJSON("http://www.somedomain.com/someurl", function(data) { jQuery(".someSpinnerImage").hide(); // Do something with data }
$ .getJSON只是$ .ajax函数的快捷function
get: function( url, data, callback, type ) { // shift arguments if data argument was ommited if ( jQuery.isFunction( data ) ) { callback = data; data = null; } return jQuery.ajax({ type: "GET", url: url, data: data, success: callback, dataType: type }); }, getJSON: function( url, data, callback ) { return jQuery.get(url, data, callback, "json"); },
因此,如果你需要做更多的事情,那么基本的getJSON调用只需使用$ .ajax,如:
jQuery.ajax({ url: url, dataType: "json", beforeSend: function(){ $('.loading').show(); } });
另一种选择是使用$ .ajaxSend和$ .ajaxComplete函数,但这将使每个ajax调用之前和之后调用这些函数。
我想你想使用$ .ajaxStart()和$ .ajaxStop() 。 这些将允许您在ajax / JSON请求上显示和隐藏加载gif。 如果有多个ajax请求正在进行,它也会做正确的事情。
我认为您正在使用JSONP从另一台服务器调用脚本。 我完成了我的作业,并且在JSONP调用中没有onSend事件。
正确的方法是使用beforeSend回调,因为没有在缓存的查询上调用完整的回调,因为在这个实例中没有发送请求,因此也没有调用beforeSend。
换句话说,如果您在创建$ .Ajax请求之前显示加载图像并依赖于将其隐藏在该请求的完成内,则在缓存查询时,您的加载图像将停留在“show”上。
所以这是正确的方法;
$.ajax({ url: url, dataType: "json", beforeSend: function() { $('.loading').show(); }, success: function(data) { // Do stuff... }, complete: function() { $('.loading').hide(); }});