Если я вас правильно понял, у вас есть фундаментальное недопонимание того, как работают веб-приложения.
Ваш PHP-сценарий не может дождаться выполнения бита AJAX, поскольку весь сценарий сначала запускается на сервере, а выходные данные, часть которых является вызовом AJAX, затем отправляются в браузер. Вы должны переосмыслить то, как вы это делаете.
Например, вы могли бы сначала сделать так, чтобы JavaScript выполнял вызов AJAX, а затем перенаправлять браузер.
Редактировать: ОК, теперь, когда я немного подумал об этом, я вижу, как что-то подобное может работать, когда вы не используете буферизацию вывода, если браузер выполняет скрипт как только он это увидит (не загрузив полную страницу). Если это действительно так, то вы по-прежнему полагаетесь на синхронизацию браузера, качество интернет-соединения пользователя и т. Д., Чтобы поддерживать синхронизацию. Это определенно не хорошая вещь.
Однако единственный способ, который может сработать, - это если вызов AJAX выводится в браузер до вызова заголовка - что невозможно! Заголовки должны быть отправлены до содержимого в ответе HTTP (именно поэтому вы используете буферизацию вывода в первую очередь), поэтому либо вы не будете выводить JavaScript, либо вызов заголовка завершится неудачно. Поэтому я рекомендую вам пересмотреть свой подход.