Específicamente, ¿en qué se diferencia del valor predeterminado ( async: true
)?
¿En qué circunstancias querría conjunto explícito async
a false
, y lo hace tener algo que ver con la prevención de otros eventos en la página de disparar?
Específicamente, ¿en qué se diferencia del valor predeterminado ( async: true
)?
¿En qué circunstancias querría conjunto explícito async
a false
, y lo hace tener algo que ver con la prevención de otros eventos en la página de disparar?
Respuestas:
¿Tiene algo que ver con evitar que se activen otros eventos en la página?
Si.
Establecer asíncrono en falso significa que la declaración que está llamando debe completarse antes de que se pueda llamar a la siguiente declaración en su función. Si configura async: true, esa declaración comenzará su ejecución y se llamará a la siguiente sin importar si la declaración asincrónica se ha completado todavía.
Para obtener más información, consulte: alcance de la función anónima jQuery ajax success
async: false
elimina completamente la asincronía de la llamada . La llamada a los ajax
bloques : el código que sigue no se ejecuta hasta que el servidor ha respondido.
async: false
está muerto, lo intenté y obtuve18: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
Si deshabilita la recuperación asincrónica, su secuencia de comandos se bloqueará hasta que se haya completado la solicitud. Es útil para realizar alguna secuencia de solicitudes en un orden conocido, aunque creo que las devoluciones de llamada asíncronas son más limpias.
Un caso de uso es hacer una ajax
llamada antes de que el usuario cierre la ventana o salga de la página. Esto sería como eliminar algunos registros temporales en la base de datos antes de que el usuario pueda navegar a otro sitio o cierre el navegador.
$(window).unload(
function(){
$.ajax({
url: 'your url',
global: false,
type: 'POST',
data: {},
async: false, //blocks window close
success: function() {}
});
});
De
https://xhr.spec.whatwg.org/#synchronous-flag
XMLHttpRequest síncrono fuera de los trabajadores está en proceso de ser eliminado de la plataforma web ya que tiene efectos perjudiciales para la experiencia del usuario final. (Este es un proceso largo que lleva muchos años). Los desarrolladores no deben pasar falso por el argumento asíncrono cuando el entorno global de JavaScript es un entorno de documentos. Se recomienda encarecidamente a los agentes de usuarios que adviertan sobre dicho uso en las herramientas de desarrollador y que puedan experimentar lanzando una excepción InvalidAccessError cuando ocurra. La dirección futura es permitir solo XMLHttpRequests en subprocesos de trabajo. El mensaje pretende ser una advertencia a tal efecto.
Establecer asíncrono en falso significa que las instrucciones que siguen a la solicitud ajax deberán esperar a que se complete la solicitud. A continuación se muestra un caso en el que hay que establecer asíncrono en falso para que el código funcione correctamente.
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;
})();
El ejemplo anterior explica claramente el uso de async: false
Al establecerlo en falso, nos hemos asegurado de que una vez que los datos se recuperan de la URL , solo después de eso devuelven php_data; se llama
return php_data
declaración no puede estar en la función de éxito, sino que debe estar fuera de la $.ajax()
función. Había puesto mi equivalente del return php_data
interior success: function(){}
y siempre volvía indefinido
use esta opción decimales: 3
aquí está la 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>