Проблема здесь в A
в Ajax. Вы асинхронно отправляете семь форм, но каждая отправка может вернуться в любое время и в любом порядке. Что произойдет, если форма пять займет минуту, чтобы вернуться, потому что сервер остановлен?
Другая проблема, с которой вы столкнетесь, заключается в том, что браузеры обычно разрешают от двух до шести одновременных запросов, поэтому, несмотря на асинхронный характер вызовов, браузер может зависнуть в ожидании соединения.
Если ваше приложение зависит от одновременной отправки ajax семи форм, одним из вариантов будет попытка провести рефакторинг приложения, чтобы вы выполняли одну отправку ajax с динамическими параметрами, выбранными из всех рассматриваемых форм.
Если это невозможно, другой подход состоял бы в том, чтобы объединить семь запросов, при этом каждый запрос вызывался в обратном вызове его предшественника. Примерно так:
ColdFusion.Ajax.submitForm( 'form1', 'multipleforms.cfm', function(){
ColdFusion.Ajax.submitForm( 'form2', 'multipleforms.cfm', function(){
ColdFusion.Ajax.submitForm( 'form3', 'multipleforms.cfm', function(){
// etc
});
});
});
Здесь у нас есть каскад представлений, каждый из которых срабатывает, когда предыдущий завершен. Если ваше перенаправление не может произойти до тех пор, пока не будет отправлено form7
, это перенаправление будет внутри обратного вызова последней отправки:
// forms 1 through 6, then inside the callback of form6:
ColdFusion.Ajax.submitForm( 'form7', 'multipleforms.cfm', function(){
location.replace('http://localhost/multipleforms.cfm'); // fires last
});
При любом подходе, который может остановить браузер, самое первое, что вы должны сделать, - это открыть спиннер или сообщение о прогрессе, чтобы пользователь понял, что приложение работает. При использовании связанного подхода вы можете даже обновлять индикатор выполнения после завершения каждого этапа.
Последний вариант более грубой силы - синхронные вызовы . Проверьте аргумент asynch
. Конечно, это приведет к остановке перед перенаправлением, поэтому рефакторинг, вероятно, лучший вариант с точки зрения взаимодействия с пользователем.