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>
答案 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();});