Ответ 1
Стандартная логика всплывающего блока, содержащаяся в большинстве браузеров в эти дни, блокирует любые вызовы window.open()
, которые не являются прямым результатом действия пользователя. Код, который запускается таймерами или любым асинхронным обратным вызовом (например, ваша функция готовности ajax), будет обрабатываться как НЕ вызванный непосредственно действиями пользователя, и новое всплывающее окно обычно будет заблокировано.
Вы можете убедиться, что это происходит из-за временного изменения блокировки всплывающих окон браузера (отключение) и увидеть, что он затем начинает работать.
Вероятно, что вам нужно сделать в качестве рабочего процесса, это создать окно при действии пользователя, которое запустило этот поток кода, а затем поместить содержимое в окно, когда вы получите ответ ajax. Возможно, это позволит браузер. Я знаю, что менее желательно с визуальной точки зрения, но вы можете поместить некоторый временный контент в окно, пока не появится ответ ajax (что-то вроде "loading..." ).