Ajax queue do not serve the tasks (jQ 1.10.1)
http://stackoverflow.com/questions/18942277/ajax-queue-do-not-serve-the-tasks
by fiddlegrimbo
HTML
Failure rate (0 to 1):
<input id="failureRate" value="0" size="4" title="0 == never fail, 1 == always fail">
<button id="go">Go</button>
<button id="clear">Clear</button>
<div id="Status"></div>
CSS
body {
font-size: 9pt;
font-family: Tahoma;
}
JavaScript
var fakeTasks = $([1, 2, 3]).map(function () {
return {
TaskName: "task" + this
};
}).toArray();
function jsFiddleData(data, delay) {
// add a random delay of 0..4 seconds.
delay = Math.floor(delay || Math.random() * 4);
data.delay = delay;
return {
json: JSON.stringify(data),
delay: delay
};
}
function postStatus(s) {
$("#Status").append(s + "<br>");
}
function postResponse(r, msg) {
var colour = ("fail" === r.status) ? "red" : "green";
msg = "<span style=color:" + colour + ">" + msg + "</span>";
postStatus(msg);
}
function fail() {
return newPromise("reject", arguments);
}
function ok() {
return newPromise("resolve", arguments);
}
function newPromise(type, args) {
return $.Deferred(function(dfd) {
dfd[type].apply(dfd, args);
}).promise();
}
function createObject() {
var ob = {};
// copy all the arguments name/value pairs into the error object
for (var i = 0; i < arguments.length; i += 2) {
var n = arguments[i];
var v = arguments[i + 1];
ob[n] = v;
}
return ob;
}
function getTasks() {
return ajax({
// replace original URL with jsfiddle URL and test data
//url: "/Tests/GetData/",
url: "/echo/json/",
data: jsFiddleData(fakeTasks),
type: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8"
}).then(function(data) {
return ok(createObject("status", "ok", "op", "getTasks", "data", data));
}, function() {
return ok(createObject("status", "fail", "op", "getTasks"));
});
}
function doTask(task) {
return ajax({
// replace original URL with jsfiddle URL and test data
//url: "/Tests/DoTask/",
//data: {
// taskName: task.TaskName
//},
// + "?" + task.TaskName for cache-busting
url: "/echo/json/" + "?" + task.TaskName,
data: jsFiddleData({
...