Могу ли я избежать синхронного обратного вызова, если я хочу, чтобы щелчок только * иногда * открывал новое окно? - PullRequest
3 голосов
/ 24 августа 2011

В этом сценарии:

  • Пользователь вводит некоторую информацию в текстовое поле
  • Пользователь нажимает кнопку
  • На стороне сервера обработкавведенная информация имеет место
  • В зависимости от результата обработки на стороне сервера, либо открывается новое окно, или должно отображаться сообщениена текущей странице (и без всплывающего окна)

Я не могу придумать другой подход, кроме использования async: false в вызове jQuery ajax, что настоятельно не рекомендуется :

Установка для этой опции значения false (и, следовательно, прекращение вызова в асинхронном режиме) настоятельно не рекомендуется, поскольку это может привести к тому, что браузер перестает отвечать на запросы.

I 'мы пытались:

  • иметь вызов быть асинхронным и в обработчике обратного вызова, в зависимости от того, что сервер сказал, иногда открывая новое окно - это блокируется всплывающими окнами
  • другая идеячто я даже не беспокоился из-заего неприятность заключается в том, чтобы всегда открывать окно, и именно это новое окно вызывает сервер, а иногда закрывает себя (каким-то образом обновляя текст в родительском элементе при его выходе)

Я остановился на том, что я описал выше: в обработчике click выполните синхронный вызов сервера, и если сервер скажет об этом, откройтеновое окно.Блокировщики всплывающих окон довольны этим, потому что открытие окна выполняется в обработчике кликов.Но ...


Подобные (но не повторяющиеся, поскольку я не всегда хочу открыть новое окно) вопросы, которые не дали хорошего решения:

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Я испробовал свою «неприятную» идею: всегда открывать новое окно и , чтобы это новое окно вызывало сервер, закрывая себя, если результаты вызова сервера диктовали, что это не требуется.

Но это было довольно ужасно, поэтому я остановился на синхронном вызове.

Так что для меня ответ на этот вопрос нет, вы не можете избежать синхронности вэта ситуация .

0 голосов
/ 18 сентября 2011

что вы можете сделать, это

попытаться создать на своей странице скрытое поле, для которого будет установлено значение типа true или false на стороне сервера, которое вы можете проверить позже в документе jquery .readyfunction

если значение равно false, просто покажите сообщение, иначе появится новое окно

, столь же простое, как это

...