In particolare, in che cosa differisce dal default ( async: true
)?
In quali circostanze dovrei voler insieme esplicito async
a false
, e lo fa avere a che fare con la prevenzione di altri eventi sulla pagina di sparare?
In particolare, in che cosa differisce dal default ( async: true
)?
In quali circostanze dovrei voler insieme esplicito async
a false
, e lo fa avere a che fare con la prevenzione di altri eventi sulla pagina di sparare?
Risposte:
Ha qualcosa a che fare con la prevenzione dell'attivazione di altri eventi sulla pagina?
Sì.
L'impostazione di asincronizzazione su falso significa che l'istruzione che si sta chiamando deve essere completata prima di poter chiamare l'istruzione successiva nella funzione. Se imposti asincrono: vero, allora quell'istruzione inizierà l'esecuzione e l'istruzione successiva verrà chiamata indipendentemente dal fatto che l'istruzione asincrona sia stata ancora completata.
Per ulteriori informazioni, consultare: Ambito della funzione anonima di successo jQuery ajax
async: false
rimuove completamente l'asincrono dalla chiamata . La chiamata ai ajax
blocchi : il codice che segue non viene eseguito fino a quando il server non ha risposto.
async: false
morto, l'ho provato e ottenuto18:17:49.384 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help http://xhr.spec.whatwg.org/ 1 jquery.js:9061:4
Se disabiliti il recupero asincrono, lo script verrà bloccato fino a quando la richiesta non sarà stata soddisfatta. È utile per eseguire alcune sequenze di richieste in un ordine noto, anche se trovo che i callback asincroni siano più puliti.
Un caso d'uso è quello di effettuare una ajax
chiamata prima che l'utente chiuda la finestra o lasci la pagina. Questo sarebbe come eliminare alcuni record temporanei nel database prima che l'utente possa navigare su un altro sito o chiudere il browser.
$(window).unload(
function(){
$.ajax({
url: 'your url',
global: false,
type: 'POST',
data: {},
async: false, //blocks window close
success: function() {}
});
});
A partire dal
https://xhr.spec.whatwg.org/#synchronous-flag
XMLHttpRequest sincrono al di fuori dei lavoratori è in procinto di essere rimosso dalla piattaforma Web in quanto ha effetti dannosi per l'esperienza dell'utente finale. (Questo è un lungo processo che richiede molti anni.) Gli sviluppatori non devono passare false per l'argomento asincrono quando l'ambiente globale JavaScript è un ambiente documentale. Gli interpreti sono caldamente invitati ad avvertire di tale utilizzo negli strumenti di sviluppo e possono provare a lanciare un'eccezione InvalidAccessError quando si verifica. La direzione futura è consentire solo XMLHttpRequests nei thread di lavoro. Il messaggio vuole essere un avvertimento in tal senso.
Impostando async su false si intende che le istruzioni che seguono la richiesta ajax dovranno attendere il completamento della richiesta. Di seguito è riportato un caso in cui è necessario impostare async su false, affinché il codice funzioni correttamente.
var phpData = (function get_php_data() {
var php_data;
$.ajax({
url: "http://somesite/v1/api/get_php_data",
async: false,
//very important: else php_data will be returned even before we get Json from the url
dataType: 'json',
success: function (json) {
php_data = json;
}
});
return php_data;
})();
L'esempio sopra spiega chiaramente l'uso di async: false
Impostando su false, abbiamo fatto in modo che una volta che i dati sono retreived dal URL , solo dopo che php_data di ritorno; è chiamato
return php_data
affermazione non può essere nella funzione di successo, ma deve essere esterna alla $.ajax()
funzione. Avevo messo il mio equivalente return php_data
all'interno success: function(){}
e stava sempre tornando indefinito
utilizzare questa opzione decimali: 3
ecco l'URL: https://demos.telerik.com/kendo-ui/numerictextbox/index
<!DOCTYPE html>
<html>
<head>
<base href="https://demos.telerik.com/kendo-ui/numerictextbox/index">
<style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
<title></title>
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.default-v2.min.css" />
<script src="https://kendo.cdn.telerik.com/2019.3.1023/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2019.3.1023/js/kendo.all.min.js"></script>
</head>
<body>
<div id="example">
<div id="add-product" class="demo-section k-content">
<p class="title">Add new product</p>
<ul id="fieldlist">
<li>
<label>
Price:
<input id="currency" type="number" title="currency" value="30" min="0" max="100" style="width: 100%;" />
</label>
</li>
<li>
<label>
Price Discount:
<input id="percentage" value="0.05" title="percentage" style="width: 100%;" />
</label>
</li>
<li>
<label>
Weight:
<input id="custom" value="2" title="custom" style="width: 100%;" />
</label>
</li>
<li>
<label>
Currently in stock:
<input id="numeric" type="number" title="numeric" value="17" min="0" max="100" step="1" style="width: 100%;" />
</label>
</li>
</ul>
</div>
<script>
$(document).ready(function() {
// create NumericTextBox from input HTML element
$("#numeric").kendoNumericTextBox();
// create Curerncy NumericTextBox from input HTML element
$("#currency").kendoNumericTextBox({
format: "c",
decimals: 3
});
// create Percentage NumericTextBox from input HTML element
$("#percentage").kendoNumericTextBox({
format: "p0",
min: 0,
max: 0.1,
step: 0.01
});
// create NumericTextBox from input HTML element using custom format
$("#custom").kendoNumericTextBox({
format: "#.00 kg"
});
});
</script>
<style>
.demo-section {
padding: 0;
}
#add-product .title {
font-size: 16px;
color: #fff;
background-color: #1e88e5;
padding: 20px 30px;
margin: 0;
}
#fieldlist {
margin: 0 0 -1.5em;
padding: 30px;
}
#fieldlist li {
list-style: none;
padding-bottom: 1.5em;
}
#fieldlist label {
display: block;
padding-bottom: .6em;
font-weight: bold;
text-transform: uppercase;
font-size: 12px;
}
#fieldlist label .k-numerictextbox {
font-size: 14px;
}
</style>
</div>
</body>
</html>