Скрипт вызывает ссылку на сервер дважды - PullRequest
0 голосов
/ 02 марта 2012

Использование этой сущности для предотвращения запуска ссылок браузером при сохранении сайта в качестве веб-приложения на домашнем экране.

Сценарий работает в некоторой степени.Проблема в том, что по какой-то причине он вызывает целевую страницу дважды.Это заставляет Jquery Mobile отображать error loading page при каждой загрузке страницы, несмотря на успешную загрузку страницы.

Вот примерная ссылка:

<a href="/bookings/3/features" data-ajax="false">Link Example</a>

Вот журнал с сервера:

 Started GET "/bookings/3/features" for 10.104.4.210 at 2012-03-02 17:13:25 +0000
Processing by FeaturesController#index as HTML
  Parameters: {"booking_id"=>"3"}
  Booking Load (0.3ms)  SELECT `bookings`.* FROM `bookings` WHERE `bookings`.`id` = 3 LIMIT 1
  Car Load (0.2ms)  SELECT `cars`.* FROM `cars` WHERE `cars`.`id` = 2 LIMIT 1
  CarModel Load (0.2ms)  SELECT `car_models`.* FROM `car_models` WHERE `car_models`.`id` = 1 LIMIT 1
  Manufacturer Load (0.2ms)  SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`id` = 1 LIMIT 1
  Feature Load (0.3ms)  SELECT `features`.* FROM `features` WHERE `features`.`car_model_id` = 1
   (0.2ms)  SELECT COUNT(*) FROM `car_colours` WHERE `car_colours`.`car_model_id` = 1
  Rendered features/index.html.erb within layouts/frontEnd (5.2ms)
  Rendered shared/_footer.html.erb (1.1ms)
Completed 200 OK in 62ms (Views: 56.8ms | ActiveRecord: 1.4ms)


Started GET "/bookings/3/features" for 10.104.4.210 at 2012-03-02 17:13:25 +0000
Processing by FeaturesController#index as HTML
  Parameters: {"booking_id"=>"3"}
  Booking Load (0.4ms)  SELECT `bookings`.* FROM `bookings` WHERE `bookings`.`id` = 3 LIMIT 1
  Car Load (0.2ms)  SELECT `cars`.* FROM `cars` WHERE `cars`.`id` = 2 LIMIT 1
  CarModel Load (0.2ms)  SELECT `car_models`.* FROM `car_models` WHERE `car_models`.`id` = 1 LIMIT 1
  Manufacturer Load (0.2ms)  SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`id` = 1 LIMIT 1
  Feature Load (0.3ms)  SELECT `features`.* FROM `features` WHERE `features`.`car_model_id` = 1
   (0.2ms)  SELECT COUNT(*) FROM `car_colours` WHERE `car_colours`.`car_model_id` = 1
  Rendered features/index.html.erb within layouts/frontEnd (4.5ms)
  Rendered shared/_footer.html.erb (1.1ms)
Completed 200 OK in 26ms (Views: 20.8ms | ActiveRecord: 1.3ms)

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

Проблема в том, что jQuery Mobile пытается оптимизировать загрузку страниц и минимизировать запросы, выполняя ajax вместо обычной загрузки страниц. Это приводит к тому, что jQuery mobile делает первый запрос, и пока jQuery ожидает возврата, скрипт «stay_standalone» запускает и загружает страницу при обычной загрузке страницы http.

Вы можете увидеть код jQuery Mobile, связанный с этой функцией, по этим двум ссылкам: сначала в init , а затем проверка флага ajax и, наконец, выполнение запроса . Это также в глобальных конфигурационных документах jQuery Mobile .

Я немного искал jQuery Mobile в автономном режиме и ничего конкретного не нашел. Есть 2 решения этой проблемы:

  1. Удалите суть с вашего сайта / веб-приложения. Это может быть достаточным решением, так как jQuery Mobile уже делает ajax для вас - и ссылка не откроется в Safari. Также это потенциально быстрее, с меньшим количеством запросов.
  2. Если это не работает должным образом, вы можете отключить функцию ajaxEnabled в jQuery Mobile, как описано в их документах:

    $ (document) .bind ("mobileinit", function () { ajaxEnabled: false });

Второй вариант не оптимален, но может оказаться хорошим решением, пока вы не поймете, как jQuery Mobile может предотвратить загрузку страниц в Mobile Safari.

0 голосов
/ 02 марта 2012

Не совсем уверен в этом, но вы должны убедиться, что ваш скрипт возвращает false?

...