如何在 $。getJSON (跨域)中使用 beforeSend 回调。

更具体地说, $。getJSON 是对YQL服务的调用 喜欢

  

从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函数的快捷功能

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调用中没有没有beforeSend事件。

正确的方法是使用beforeSend回调,因为没有在缓存的查询上调用完整的回调,因为在这个实例中没有发送请求,因此也没有调用beforeSend。

换句话说,如果您在创建$ .Ajax请求之前显示加载图像并依赖于将其隐藏在该请求的完成内,则在缓存查询时,您的加载图像将停留在“show”上。

所以这是正确的方法;

$.ajax({
url: url,
dataType: "json",
beforeSend: function() {
    $('.loading').show();
},
success: function(data) {
    // Do stuff...
},
complete: function() {
    $('.loading').hide();
}});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top