Как правильно организовать выполнение кода поочередно?

Как можно изменить код функции SubmitData так, чтобы при условии наличия элемента с идентификатором 'grecaptcha' выполнение функции $.ajax начиналось только после успешного выполнения grecaptcha.execute, и чтобы в консоли сначала выводилось 111, а затем 222?
  • 2 марта 2024 г. 15:58
Ответы на вопрос 2
Для организации выполнения кода поочередно можно использовать коллбэки или промисы. 

Пример кода с использованием промисов:

```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');
}
Похожие вопросы