Как можно изменить код функции SubmitData так, чтобы при условии наличия элемента с идентификатором 'grecaptcha' выполнение функции $.ajax начиналось только после успешного выполнения grecaptcha.execute, и чтобы в консоли сначала выводилось 111, а затем 222?
Для организации выполнения кода поочередно можно использовать коллбэки или промисы.
Пример кода с использованием промисов:
```javascript
function executeRecaptcha() {
return new Promise((resolve, reject) => {
if ($("#grecaptcha").length) {
grecaptcha.execute().then(resolve).catch(reject);
} else {
resolve();
}
});
}
function SubmitData() {
console.log(111);
executeRecaptcha().then(() => {
$.ajax({
url: "your-url",
method: "POST",
data: yourData,
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
console.log(222);
});
}
SubmitData();
```
Теперь функция SubmitData сначала будет выполнять проверку наличия элемента с идентификатором 'grecaptcha' и выполнение grecaptcha.execute, а затем выполнение функции $.ajax только после успешного выполнения grecaptcha.execute. При этом в консоли сначала будет выводиться 111, а затем 222.
1. Перестань jquery использовать
2. await
Ну или продолжай цепочку коллбэков
function SubmitData (data) { // Проверка включена ли grecaptcha в настройках if ($('#grecaptcha').length > 0) { $.getScript('https://www.google.com/recaptcha/api.js?render=SITEKEY', function() { grecaptcha.ready(function() { grecaptcha.execute('SITEKEY', {action: '123'}).then(function(token) { console.log('111'); }).then(()=> { $.ajax({ type: "POST", url: address, data: $(formId).serialize(), contentType: "application/x-www-form-urlencoded", dataType: "text", success: function (data) { } }); }); }); }); } console.log('222'); }