我已经为jQuery创建了一个插件,现在我在这个插件中发现了一个问题,当我使用它的to或更多次时,我的回调函数每次只使用最后一个回调函数,我所有的ajax调用都是作为它的关闭做的,这是非常完美的。
现在,当我想调用一个成功的回调函数或错误回调函数时,我遇到了问题。
(function ( $ ) {
var setSettings = function(options,attrId) {
var settings = $.extend({
dataType: 'json',
timeout: 600,
alertToolbar: true,
alertId : attrId,
alertClass : 'dialogToolbar',
callback_error : null,
callback_success : null
}, options );
return settings;
}
var getToolbar = function(header, content, mode) {
if ( mode == 'error' )
{
$( document.createElement('div') )
.addClass('alertTopNav alertTopNav-error')
.append(
$( document.createElement('div') )
.append(
$( document.createElement('strong') )
.html( header )
)
.append(
$( document.createElement('br') )
)
.append( content )
)
.appendTo('#'+ settings.alertId )
.slideDown()
.delay(3000)
.slideUp(800, function()
{
$(this).remove();
});
}
else if ( mode == 'success' )
{
$( document.createElement('div') )
.addClass('alertTopNav alertTopNav-success')
.append(
$( document.createElement('div') )
.append(
$( document.createElement('strong') )
.html( header )
)
.append(
$( document.createElement('br') )
)
.append( content )
)
.appendTo('#'+ settings.alertId )
.slideDown()
.delay(3000)
.slideUp(800, function()
{
$(this).remove();
});
}
}
var functionId = 0;
$.fn.ajax_callback = function(call_url, call_data_array,call_settings) {
settings = setSettings(call_settings,$(this).attr('id'));
if (!$(this).hasClass("dialogToolbar")) {
$(this).addClass('dialogToolbar');
}
$.ajax({
type: 'POST',
url: call_url,
crossDomain: true,
xhrFields: {withCredentials: true},
data: call_data_array,
dataType: settings.dataType,
timeout: settings.timeout,
beforeSend: function(data) {
// do somthing before sending
},
success: function(data) {
if(data.status==200) {
if ( settings.callback_success != null ) {
settings.callback_success(data);
}
if (settings.alertToolbar == true ) {
getToolbar(data.success.header,data.success.msg,'success');
}
} else {
if(settings.callback_error != null) {
settings.callback_error(data);
}
if (settings.alertToolbar == true ) {
getToolbar(data.error.header,data.error.msg,'error');
}
}
},
error: function(jqXHR, textStatus, errorThrown) {
// do somthing on error
}
});
}
}( jQuery ));我使用这段代码来调用这个插件:
$('#dialogToolbar').ajax_callback('json-path-1',{
'parms' : 'value'
}, {
alertToolbar: false,
callback_success: $.testObj.callback.getAll.success,
callback_error: $.testObj.callback.getAll.error
});如果我再使用这一次,但更改成功和错误回调和json路径ofc。
$('#dialogToolbar').ajax_callback('json-path-2',{
'parms' : 'value'
}, {
alertToolbar: false,
callback_success: $.testObj.callback.getAllSecound.success,
callback_error: $.testObj.callback.getAllSecound.error
});只有塞克函数的成功和错误回调才会产生效果,所以现在我试着调试我的代码,但找不到上帝解释为什么会发生这种情况。
希望这里有一个,可以解释我的问题,以及为什么我的插件不起作用的关闭。
发布于 2015-10-15 08:07:42
您已经将设置创建为插件中的全局变量,因此每次对插件的调用都会覆盖它。
var settings = setSettings(call_settings,$(this).attr('id'));相反,您需要有对当前设置对象的本地引用,因此按照上面给出的函数创建变量为本地变量。
此外,还必须将设置引用传递给getToolbar。
var getToolbar = function(settings, header, content, mode) {
}
.....
getToolbar(settings, data.success.header,data.success.msg,'success');https://stackoverflow.com/questions/33143111
复制相似问题