如何在beforeSend
(跨域)中使用$.getJSON
回调。
更具体地说,$.getJSON
是对YQL服务的调用
喜欢
从html中选择* URL =” http://www.yahoo.com”
答案 0 :(得分:33)
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
}
答案 1 :(得分:6)
$ .getJSON只是$ .ajax函数的快捷功能
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调用之前和之后调用这些函数。
答案 2 :(得分:1)
我认为你想使用$.ajaxStart()和$.ajaxStop()。这些将允许您在ajax / JSON请求上显示和隐藏加载GIF。如果有多个ajax请求正在进行,它也会做正确的事情。
答案 3 :(得分:1)
我认为您正在使用JSONP从另一台服务器调用脚本。 我完成了我的作业,并且在JSONP调用中没有没有beforeSend事件。
答案 4 :(得分:1)
正确的方法是使用beforeSend回调,因为没有在缓存的查询上调用完整的回调,因为在这个实例中没有发送请求,因此也没有调用beforeSend。
换句话说,如果您在创建$ .Ajax请求之前显示加载图像并依赖于在该请求完成时隐藏它,如果查询被缓存,则您的加载图像将停留在" show&#34 ;
所以这是正确的方法;
$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
$('.loading').show();
},
success: function(data) {
// Do stuff...
},
complete: function() {
$('.loading').hide();
}});