如何在跨域的情况下使用beforeSend
回调函数来处理$.getJSON
方法?
更具体地说,$.getJSON
方法是用于调用YQL服务的,例如:
select * from html where url=”http://www.yahoo.com”
如何在跨域的情况下使用beforeSend
回调函数来处理$.getJSON
方法?
更具体地说,$.getJSON
方法是用于调用YQL服务的,例如:
select * from html where 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函数的一种简化方式
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();
}
});
正确的方法是使用beforeSend回调,因为在缓存查询中不会调用complete回调,因为在这种情况下不发送请求,因此也不会调用beforeSend。
换句话说,如果您在创建$ .Ajax请求之前显示加载图像,并依赖于在完成该请求期间隐藏它,如果查询被缓存,则您的加载图像将被卡在“显示”状态。
因此,这是正确的方法;
$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
$('.loading').show();
},
success: function(data) {
// Do stuff...
},
complete: function() {
$('.loading').hide();
}});
我认为您想要使用 $.ajaxStart() 和 $.ajaxStop()。它们可以让您在 Ajax/JSON 请求时显示和隐藏加载图像。如果有多个 Ajax 请求正在进行,它还会做正确的事情。
我认为你正在使用JSONP从另一个服务器调用脚本。 我做了功课,发现在JSONP调用中没有beforeSend事件。