beforeSend in $ .getJSON

时间:2009-11-28 14:01:59

标签: javascript jquery callback

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

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

  

从html中选择*   URL =” http://www.yahoo.com

5 个答案:

答案 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();
}});
相关问题