如果你想每個$.ajax()
調用之前調用
,您可以包括內getAjaxData
function getAjaxData(loadUrl, dataObject, action, type) {
return jQuery.ajax({
beforeSend: function(jqxhr, settings) {
var alert_el = $('#top_notify').find('.alert');
// Remove any additional classes added by a possible previous run
alert_el
.removeClass('visible alert-success alert-info alert-danger alert-warning');
},
type: action,
url: loadUrl,
data: dataObject,
dataType: type
});
}
內$.ajax()
beforeSend
函數中的行如果你想調用兩行後$.ajax()
調用,雖然之前notifyComplete
你可以通過一個函數數組到.done()
getAjaxData(loadUrl, dataObject, 'POST', 'json')
.done([
function(response) {
var alert_el = $('#top_notify').find('.alert');
// Remove any additional classes added by a possible previous run
alert_el
.removeClass('visible alert-success alert-info alert-danger alert-warning');
}
, function(response) {
notifyComplete(notify_type, alert_el, response);
}
]);
,如果我可以通過它的功能名稱作爲回調,而不是使用 匿名函數,因此不得不求助於使用if/else
內, 但顯然還需要的一種方式包括回調參數 。
您可以使用Function.prototype.bind()
傳遞額外的參數設置的$.ajax()
beforeSend
選項值命名函數。包含邏輯以檢查附加對象或值是否爲傳遞對象或作爲beforeSend
的默認第一個參數的jQuery jqxhr
對象。
的jsfiddle https://jsfiddle.net/dackdrek/
內實現電流javascript
$().ready(function() {
function handleBeforeSend(bool, jqxhr, settings) {
console.log(bool, jqxhr, settings);
if (bool === true) {
var alert_el = $('#top_notify').find('.alert');
// Remove any additional classes added by a possible previous run
alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning');
}
}
function notifyComplete(type, alert_el, response) {
var msg = response.output;
var result = response.result;
// Update msg in alert box
alert_el.text(msg);
if (result == 'success') {
alert_el.addClass('alert-success');
} else {
alert_el.addClass('alert-danger');
}
// Slide in alert box
alert_el.addClass('visible');
}
function getAjaxData(loadUrl, dataObject, action, type, beforeSend, bool) {
return jQuery.ajax({
type: action,
url: loadUrl,
data: dataObject,
dataType: type,
beforeSend: beforeSend.bind(null, bool)
});
}
// pass `true` to `handleBeforeSend`
getAjaxData("/echo/json/", {
json: JSON.stringify({
"output": "123",
"result": "success"
})
}, "POST", "json", handleBeforeSend, true)
.then(function(response) {
notifyComplete(null, $('#top_notify'), response)
});
setTimeout(function() {
// pass `false` to `handleBeforeSend`
getAjaxData("/echo/json/", {
json: JSON.stringify({
"output": "123",
"result": "success"
})
}, "POST", "json", handleBeforeSend, false)
.then(function(response) {
notifyComplete(null, $('#top_notify'), response)
})
}, 5000)
})
的jsfiddle https://jsfiddle.net/dackdrek/4/
你們是不是要叫'無功alert_el = $( '#top_notify')。找到('.alert');'在每個'getAjaxData'調用之前? – guest271314
@ guest271314嗯,不是真的,我可以輕鬆地將它移到全球某個地方,主要問題是在每次調用開始時刪除類的下一行。 – Brett
下一行有什麼問題?在每個'.ajax()'調用之前,你是否試圖調用alert_el.removeClass('visible alert-success alert-info alert-danger alert-warning')? – guest271314