jQuery:如何为`$ .ajax启用`beforeSend`({dataType:'jsonp'...`?有什么解决方案吗?

时间:2011-01-11 22:29:25

标签: ajax json jquery jsonp

jQuery:如何为beforeSend启用$.ajax({dataType:'jsonp'...?有什么解决方案吗? http://jsfiddle.net/laukstein/2wcpU/

<div id="content"></div>
<script>
$.ajax({
    type:"GET",
    url:'http://lab.laukstein.com/ajax-seo/.json',
    dataType:'jsonp',
    async:false,
    beforeSend:function(data){ // Are not working with dataType:'jsonp'
      $('#content').html('Loading...');
    },
    success:function(data){
        $('#content').html(data.content);
    }
});
</script>

3 个答案:

答案 0 :(得分:5)

这只是JSONP工作原理的本质,创建<script>标记,而不是实际使用XMLHttpRequest来获取数据。 对于你正在做的事情,你可以先运行代码,如下所示:

$('#content').html('Loading...');
$.ajax({
  type:"GET",
  url:'http://lab.laukstein.com/ajax-seo/.json',
  dataType:'jsonp',
  async:false,
  success:function(data){
    $('#content').html(data.content);
  }
});

答案 1 :(得分:4)

根据jQuery文档

  

从远程检索数据时   服务器(只能使用   脚本或jsonp数据类型),.   使用a执行操作    标签而不是   XMLHttpRequest对象。在这种情况下,   没有返回XMLHttpRequest对象   来自$ .ajax()和XMLHttpRequest   object和textStatus参数   传递给处理函数等   因为beforeSend将是未定义的。该   永远不会触发错误回调   JSONP请求。

jQuery论坛ajax:beforeSend for jsonp requests don't fire

提出了同样的问题

问题的状态为Status : Working on it。所以它可能会在未来发布。

正如Mike Alsups指出的那样

  

我会命名而不是功能   除了'beforeSend'以外   语义不一样。

还相关:jsonp is not firing beforeSend?


不能使用带有jsonp的beforeSend。周期。

答案 2 :(得分:2)

您可以使用此代码:

befor $ .ajax把它,你应该有一个图像(或div,span,...)加载“div_loading”id。

$("#div_loading").ajaxStart(function(){$(this).show();});
$("#div_loading").ajaxStop(function(){$(this).hide();});