javascript - 脚本导致链接调用服务器两次

标签 javascript ruby-on-rails web-applications jquery-mobile mobile-safari

使用this gist当网站另存为主屏幕 Web 应用程序时,防止链接启动浏览器。

该脚本在一定程度上正在发挥作用。问题是由于某种原因它调用目标页面两次。这导致 Jquery Mobile 在每次页面加载时显示加载页面错误,尽管已成功加载页面。

这是一个示例链接:

<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)

最佳答案

问题是 jQuery Mobile 尝试通过执行 ajax 而不是常规页面加载来优化页面加载并最小化请求。这会导致 jQuery mobile 发出第一个请求,当 jQuery 等待返回时,“stay_standalone”脚本会触发并以常规 http 页面加载方式加载页面。

您可以在这两个链接中看到与此功能相关的 jQuery Mobile 代码:first in the init ,然后 checking for ajax flag and finally making a request 。这也是in jQuery Mobile's global config docs .

我在独立模式下搜索了一些有关 jQuery Mobile 的信息,但没有找到任何具体内容。这个问题有两种解决方案:

  1. 从您的网站/网络应用程序中删除要点。这可能是一个足够的解决方案,因为 jQuery Mobile 已经为您执行了 ajax - 并且该链接不会在 Safari 中打开。此外,这可能会更快,请求更少。
  2. 如果这没有按预期工作,您可以禁用 jQuery Mobile 中的 ajaxEnabled 功能,如其文档中所述:

    $(文档).bind("mobileinit", function(){ ajax启用:假 });

第二个选项不是最佳选择,但可能是一个很好的解决方案,直到您弄清楚 jQuery Mobile 如何阻止 Mobile Safari 中的页面加载。

关于javascript - 脚本导致链接调用服务器两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537689/

相关文章:

javascript - 如何模拟加载页面选择框中的事件?

html - 我如何将每个换行符转换/替换为 '<br/>'?

sql - 使用 Postgres 在 SQL 中进行复杂排序

java - 获取有关无效 HttpServletRequest session 的信息

javascript - typescript 定义构造函数或函数?

javascript - 基于动态生成的 DOM 元素运行脚本

javascript - JSON - 未捕获类型错误 : Cannot read property of undefined

ruby-on-rails - 无法批量分配 protected 属性

javascript - 集成 React.js 非 JS 服务器 API

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'id_cita' in 'field list'