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(); }});