jQuery
jQuery Uppskjutna objekt och löften
Sök…
Introduktion
Grundläggande löfte skapande
Här är ett mycket enkelt exempel på en funktion som " lovar att fortsätta när en given tid förflutit". Det gör det genom att skapa ett nytt Deferred
objekt, som löses senare och återlämna det uppskjutna löfte:
function waitPromise(milliseconds){
// Create a new Deferred object using the jQuery static method
var def = $.Deferred();
// Do some asynchronous work - in this case a simple timer
setTimeout(function(){
// Work completed... resolve the deferred, so it's promise will proceed
def.resolve();
}, milliseconds);
// Immediately return a "promise to proceed when the wait time ends"
return def.promise();
}
Och använd så här:
waitPromise(2000).then(function(){
console.log("I have waited long enough");
});
Asynkrona löften kedja
Om du har flera asynkrona uppgifter som måste ske efter varandra måste du kedja ihop sina löfteobjekt. Här är ett enkelt exempel:
function First() {
console.log("Calling Function First");
return $.get("/ajax/GetFunction/First");
}
function Second() {
console.log("Calling Function Second");
return $.get("/ajax/GetFunction/Second");
}
function Third() {
console.log("Calling Function Third");
return $.get("/ajax/GetFunction/Third");
}
function log(results){
console.log("Result from previous AJAX call: " + results.data);
}
First().done(log)
.then(Second).done(log)
.then(Third).done(log);
jQuery ajax () framgång, fel VS. gjort (), .fail ()
framgång och fel: en framgångssuppringning som åberopas när en Ajax-begäran har slutförts.
Ett misslyckande återuppringning som åberopas om det finns något fel vid begäran.
Exempel:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json',
success: function (data) { successFunction(data); },
error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
});
. gjort () och .fail ():
.ajax (). gjort (funktion (data, textStatus, jqXHR) {}); Ersätter metod. Succé () som avskrivs i jQuery 1.8.Detta är en alternativ konstruktion för framgångssignalens återuppringningsfunktion ovan.
.ajax (). fail (funktion (jqXHR, textStatus, errorThrown) {}); Ersätter metod .error () som avskrivs i jQuery 1.8.Detta är en alternativ konstruktion för den kompletta återuppringningsfunktionen ovan.
Exempel:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });
Få det aktuella tillståndet av ett löfte
Som standard väntar ett löfte på när det skapas. Löftets tillstånd ändras när det uppskjutna objektet som skapade löfte antingen löser / avvisar det.
var deferred = new $.Deferred();
var d1= deferred.promise({
prop: "value"
});
var d2= $("div").promise();
var d3= $("div").hide(1000).promise();
console.log(d1.state()); // "pending"
console.log(d2.state()); // "resolved"
console.log(d3.state()); // "pending"