Я обычно использую эту логику делегирования ajax для реализации jquery / ajax, если только мне не нужен больший контроль над очередью запросов, в этом случае я буду использовать метод $.when.apply()
, опубликованный ниже.
Что касается вашего вопроса о разных URL-адресах для разных кнопок, вы можете использовать атрибут data
в элементе кнопки для хранения URL-адресов и доступа через функцию jquery .data()
.
Делегация Ajax
(function($){
$(function(){
//Usage Example
var inputString = $("#myInput").val();
var inputNumber = $("#myInteger").val();
var data = {inputString: inputString, inputNumber : inputNumber};
$('parent').on('click', 'button', delegateAjax('js/myAjax.php', data, 'POST');
});
function delegateAjax(url, data, responseType, dataType, callback) {
function successHandler() {
console.log("Ajax Success");
};
function failureHandler(xhr, status, error) {
console.log("Ajax Error");
console.log(status);
console.log(error);
console.dir(xhr);
};
function handler404(xhr, status, error) {
console.log("404 Error");
console.log(status);
console.log(error);
console.dir(xhr);
};
function handler500(xhr, status, error) {
console.log("500 Error");
console.log(status);
console.log(error);
console.dir(xhr);
};
url = typeof url !== 'undefined' ? url : 'js/ajaxDefault.php';
data = typeof data !== 'undefined' ? data : new Object();
responseType = typeof responseType !== 'undefined' ? responseType : 'GET';
dataType = typeof dataType !== 'undefined' ? dataType : 'json';
callback = typeof callback !== 'undefined' ? callback : 'callback';
var jqxhr = $.ajax({url: url, type: responseType, cache: true, data: data, dataType: dataType, jsonp: callback,
statusCode: { 404: handler404, 500: handler500 }});
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);
};
})(jQuery);
Очередь запросов Ajax
//Set this var to max requests in queue.
var ajaxMax = 5;
var ajaxActive = 0;
$( document ).ajaxStart(function() {
ajaxActive++;
document.ajaxRunning = ajaxActive > 0;
document.ajaxQueueFull = ajaxActive > ajaxMax;
});
$(document).ajaxStop(function() {
ajaxActive--;
document.ajaxRunning = ajaxActive > 0;
document.ajaxQueueFull = ajaxActive > ajaxMax;
}
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
while(request === null && (request.readyState < 1 || request.readyState > 4)) {
if (document.ajaxQueueFull) {
//abort existing requests
$.each(request as v) {
v.abort();
}
}
pendingAjax.push(request);
}
$.when.apply($, pendingAjax).done( successCallback ).fail( failCallback)