В частности, чем он отличается от default ( async: true)?
При каких обстоятельствах я хотел бы явно установить asyncзначение false, и имеет ли это какое-то отношение к предотвращению запуска других событий на странице?
Да, мне кажется, это должно называться как-нибудь иначе, чем "Ajax" (асинхронный JavaScript и XML), если он не асинхронный ...
devlord
Асинхронный означает, что скрипт отправит запрос на сервер и продолжит выполнение, не дожидаясь ответа. Как только ответ получен, запускается событие браузера, что, в свою очередь, позволяет сценарию выполнять связанные действия.
СагарПанчал
Ответы:
300
Это как-то связано с предотвращением запуска других событий на странице?
Да.
Установка async в false означает, что оператор, который вы вызываете, должен завершиться до того, как будет вызван следующий оператор в вашей функции. Если вы установите async: true, то этот оператор начнет свое выполнение, и следующий оператор будет вызван независимо от того, завершился ли еще оператор async.
Мне всегда было интересно, как это было достигнуто, поскольку JavaScript не является многопоточным.
Мэтт
4
@ L.DeLeo - нет, совсем нет - отсрочки - еще один способ управления сложностью вызовов асинхронных функций - полностью async: falseустраняет асинхронность вызова . Вызов ajaxблоков - код, который следует за ним, не выполняется до тех пор, пока сервер не ответит.
Шон Виейра
14
Помните, что это также означает, что браузер не будет захватывать / запускать какие-либо события, происходящие во время выполнения ajax. Я нашел это трудным путем, пытаясь выяснить, почему Firefox не вызывал событие щелчка. Оказалось, что это произошло из-за «вынужденного» размытия с последующим вызовом синхронизации, блокирующим его.
Кажется async: false, мертв, я попробовал и получил18: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
Аба
120
async:false= Код приостановлен . (Другой код, ожидающий завершения.)
async:true= Код продолжается . (Ничто не останавливается. Другой код не ждет .)
Если вы отключите асинхронный поиск, ваш скрипт будет блокироваться, пока запрос не будет выполнен. Это полезно для выполнения некоторой последовательности запросов в известном порядке, хотя я считаю, что асинхронные обратные вызовы более понятны.
Джо: это будет зависеть от того, есть ли у вас рабочие потоки в фоновом режиме.
Джон Милликин
10
Одним из вариантов использования является ajaxвызов до того, как пользователь закроет окно или покинет страницу. Это похоже на удаление некоторых временных записей в базе данных, прежде чем пользователь сможет перейти на другой сайт или закрыть браузер.
$(window).unload(function(){
$.ajax({
url:'your url',global:false,
type:'POST',
data:{},async:false,//blocks window close
success:function(){}});});
Никакое количество JavaScript не остановит окно браузера
jammykam
Мне нужно было async false для чего-то совершенно не связанного, но это решило мою проблему, так как позволило моему сценарию получить значение из файла XML, прежде чем заполнить его на странице как неопределенное.
Синхронный запрос XMLHttpRequest за пределами рабочих находится в процессе удаления с веб-платформы, поскольку он оказывает пагубное влияние на работу конечного пользователя. (Это долгий процесс, который занимает много лет.) Разработчики не должны передавать false для асинхронного аргумента, когда глобальная среда JavaScript является средой документов. Пользовательским агентам настоятельно рекомендуется предупреждать о таком использовании в инструментах разработчика и могут поэкспериментировать с генерацией исключения InvalidAccessError при его возникновении. Будущее направление - разрешить XMLHttpRequests только в рабочих потоках. Сообщение предназначено для предупреждения об этом.
Установка async в false означает, что инструкции, следующие за ajax-запросом, должны будут ждать его завершения. Ниже приведен один случай, когда нужно установить async в false, чтобы код работал правильно.
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;})();
Приведенный выше пример ясно объясняет использование async: false
Установив для него значение false, мы убедились, что как только данные извлекаются из URL , только после этого возвращаются php_data; называется
На всякий случай, если у кого-то еще есть такая же проблема, как у меня: этот ответ подчеркивает, что return php_dataутверждение не может быть в функции успеха, но должно быть вне $.ajax()функции. Я положил свой эквивалент return php_dataизнутри, success: function(){}и он всегда возвращался неопределенным
<!DOCTYPE html><html><head><basehref="https://demos.telerik.com/kendo-ui/numerictextbox/index"><style>html {font-size:14px;font-family: Arial, Helvetica, sans-serif;}</style><title></title><linkrel="stylesheet"href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.default-v2.min.css"/><scriptsrc="https://kendo.cdn.telerik.com/2019.3.1023/js/jquery.min.js"></script><scriptsrc="https://kendo.cdn.telerik.com/2019.3.1023/js/kendo.all.min.js"></script></head><body><divid="example"><divid="add-product"class="demo-section k-content"><pclass="title">Add new product</p><ulid="fieldlist"><li><label>
Price:
<inputid="currency"type="number"title="currency"value="30"min="0"max="100"style="width:100%;"/></label></li><li><label>
Price Discount:
<inputid="percentage"value="0.05"title="percentage"style="width:100%;"/></label></li><li><label>
Weight:
<inputid="custom"value="2"title="custom"style="width:100%;"/></label></li><li><label>
Currently in stock:
<inputid="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:20px30px;margin:0;}#fieldlist {margin:00-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>
Ответы:
Да.
Установка async в false означает, что оператор, который вы вызываете, должен завершиться до того, как будет вызван следующий оператор в вашей функции. Если вы установите async: true, то этот оператор начнет свое выполнение, и следующий оператор будет вызван независимо от того, завершился ли еще оператор async.
Для получения дополнительной информации см .: JQuery AJAX Успех анонимная функция Область
источник
async: false
устраняет асинхронность вызова . Вызовajax
блоков - код, который следует за ним, не выполняется до тех пор, пока сервер не ответит.async: false
, мертв, я попробовал и получил18: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
async:false
= Код приостановлен . (Другой код, ожидающий завершения.)async:true
= Код продолжается . (Ничто не останавливается. Другой код не ждет .)Так просто, как это.
источник
Async:False
проведет выполнение кода покоя. Как только вы получите ответ ajax, только тогда будет выполняться остальная часть кода.источник
Если вы отключите асинхронный поиск, ваш скрипт будет блокироваться, пока запрос не будет выполнен. Это полезно для выполнения некоторой последовательности запросов в известном порядке, хотя я считаю, что асинхронные обратные вызовы более понятны.
источник
Одним из вариантов использования является
ajax
вызов до того, как пользователь закроет окно или покинет страницу. Это похоже на удаление некоторых временных записей в базе данных, прежде чем пользователь сможет перейти на другой сайт или закрыть браузер.источник
Из
https://xhr.spec.whatwg.org/#synchronous-flag
Синхронный запрос XMLHttpRequest за пределами рабочих находится в процессе удаления с веб-платформы, поскольку он оказывает пагубное влияние на работу конечного пользователя. (Это долгий процесс, который занимает много лет.) Разработчики не должны передавать false для асинхронного аргумента, когда глобальная среда JavaScript является средой документов. Пользовательским агентам настоятельно рекомендуется предупреждать о таком использовании в инструментах разработчика и могут поэкспериментировать с генерацией исключения InvalidAccessError при его возникновении. Будущее направление - разрешить XMLHttpRequests только в рабочих потоках. Сообщение предназначено для предупреждения об этом.
источник
Установка async в false означает, что инструкции, следующие за ajax-запросом, должны будут ждать его завершения. Ниже приведен один случай, когда нужно установить async в false, чтобы код работал правильно.
Приведенный выше пример ясно объясняет использование async: false
Установив для него значение false, мы убедились, что как только данные извлекаются из URL , только после этого возвращаются php_data; называется
источник
return php_data
утверждение не может быть в функции успеха, но должно быть вне$.ajax()
функции. Я положил свой эквивалентreturn php_data
изнутри,success: function(){}
и он всегда возвращался неопределеннымиспользуйте эту опцию десятичных дробей: 3
Вот URL: https://demos.telerik.com/kendo-ui/numerictextbox/index
источник