jQuery ajax before beforeSend
jQuery ajax before beforeSend
我正在尝试向jQuery的beforeSend添加一些自定义代码。为此,我想出了这个代码:
(function( $ ){
$.ajax_overlay = function(settings, overlay_selector, target_selector, class_active, class_deactive) {
var $overlay = $(overlay_selector);
function overlay_before(user_beforesend){
if ( target_selector === undefined )
{
var $body = $('body');
$overlay.height($body.height()).width($body.width()).css("position","absolute");
}
else{
var $target= $(target_selector);
$overlay.height($target.height()).width($target.width()).css("position","absolute");
$target.css("position","relative").append($overlay);
}
if (typeof(class_active) == "string"){
$overlay.addClass(class_active)
}
if (typeof(class_deactive) == "string") {
$overlay.removeClass(class_deactive)
}
$overlay.css("display","block").animate(
{
opacity: 0.8
},
500);
if (typeof(user_beforesend) == "function"){
user_beforesend();
}
}
function overlay_complete(user_complete){
if (typeof(class_active) == "string"){
$overlay.removeClass(class_active);
}
if (typeof(class_deactive) == "string") {
$overlay.addClass(class_deactive);
}
$overlay.animate(
{
opacity: 0.0
},
500, function(){
$overlay.css("display","none");
});
if (typeof(user_complete) == "function"){
user_complete();
}
}
if (typeof(overlay_selector) == "string"){
settings["beforeSend"] = overlay_before(settings["beforeSend"]);
settings["complete"] = overlay_complete(settings["complete"]);
}
return jQuery.ajax(settings);
}
})( jQuery );
主要思想是使用这个插件在每个ajax请求上添加一个覆盖。我面临的问题是,我无法保持beforeSend参数的原始行为,因为它需要xhr
和settings
参数。
如何获得一个合适的xhr以提供给beforeSend函数?
编辑:
发现了一些与此相关的有趣链接/答案以编程方式向javascript函数添加代码在引用原始时重写JavaScript函数
让overlay_before返回一个具有预期参数的函数,并将这些参数传播到user_beforesend调用,应该可以做到这一点:
function overlay_before(user_beforesend){
return function(xhr, settings)
{
if ( target_selector === undefined )
{
var $body = $('body');
$overlay.height($body.height()).width($body.width()).css("position","absolute");
}
else{
var $target= $(target_selector);
$overlay.height($target.height()).width($target.width()).css("position","absolute");
$target.css("position","relative").append($overlay);
}
if (typeof(class_active) == "string"){
$overlay.addClass(class_active)
}
if (typeof(class_deactive) == "string") {
$overlay.removeClass(class_deactive)
}
$overlay.css("display","block").animate(
{
opacity: 0.8
},
500);
if (typeof(user_beforesend) == "function"){
user_beforesend(xhr,settings);
}
}
}
您尝试过var xhr = new XmlHttpRequest();
吗?还是你在寻找更多/不同的东西?
相关文章:
- 无法覆盖CSS伪元素:before
- React DOM offsetHeight before rendering
- SyntaxError:缺少;before语句使用AJAX
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 在ajax中添加额外的数据:beforeSend(link_to)
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- 如何在“;beforeSend:function()"使用ajax和jquery
- jquery insert-before to text in the same DOM
- 将内容添加到每行的开头,例如第一行的 ::before
- 样式 DOM 上的 $.before() 性能问题
- ember.js appending view to just before </body>
- 为node.js中的方法设置before/after钩子
- jQuery deferred method and ajax beforeSend()
- 有什么技巧可以让vw调整大小以在webkit浏览器上的:before伪类上工作吗
- SyntaxError:缺少;before语句-jQuery ContentHover
- ajax beforeSend 不会根据流执行
- jQuery:如何选择所有具有:before或:after的伪元素
- Jquery Ajax beforeSend loading animation
- 使用 jQuery.ajaxSetup 定义 beforeSend 和更改发送的数据
- jQuery ajax before beforeSend