1

我有一个要转换的 CodeIgniter Web 应用程序(更新:我正在尝试覆盖 JQM UI)[到 jQuery Mobile 应用程序]。我在设置链接到我的 CodeIgniter 控制器的选项卡时遇到问题。

这是我的“header.php”视图中的代码 - 在<div data-role="page"></div>. 这是由一个主控制器调用的,它工作正常。现在,问题是:我正在尝试设置我的 jQuery Mobile 导航栏选项卡来调用一个名为收件箱的新控制器。

<div data-role="footer" data-position="fixed">
  <div data-role="navbar">
    <ul>
      <li>
          <a href='<?php echo base_url()."inbox"?>' data-ajax="false">Inbox</a>
      </li>
    </ul>
  </div>
</div>

如果没有 jQuery Mobile,链接可以正常工作并触发收件箱 CodeIgniter 控制器,但是在我的 header.php 视图中启用 JQM 后,当我单击收件箱选项卡时,我会得到一个“404 Not Found”页面。

更新 - html 头中的这个 jQuery 代码:

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/all-mobile.css" type="text/css" media="screen"/>

<link rel="icon" href="<?php echo base_url(); ?>assets/images/logo.png" />
<link rel="apple-touch-icon-precomposed" href="<?php echo base_url(); ?>assets/images/logo.png" />

<meta name="apple-mobile-web-app-capable" content="yes" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

更新 2:如果我在 t.js 中插入此代码以删除自动 ajax 链接:

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

我的新头 html 代码现在是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="<?php echo base_url(); ?>assets/js/t.js"></script>

<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

... jQuery Mobile 确实加载了,但“收件箱”链接仍会通过 CI生成 404 页面。

更新3:我确定这是本地的问题。当我将 CI 代码和新的 jQuery Mobile 脚本上传到我的 Web 服务器时,链接到我的 inbox.php 控制器的选项卡实际上可以工作!有谁知道为什么它不能在我使用 MAMP 的本地机器上运行?现在,我似乎无法使用此配置在本地进行开发和测试。有解决办法吗?

查看 jquerymobile.com/demos/1.2.0/docs/api/globalconfig.html 上的 allowCrossDomainPages 我添加了 $.mobile.allowCrossDomainPages = true; 到 jQuery 初始化,但它没有帮助运行 MAMP 的 localhost 服务器提供 inbox.php 控制器 - 仍然是 404。

更新 4:问题已解决。原来隐藏文件 .htaccess 中存在问题。要重写 URI,它包含一个“RewriteBase /myapp-mobile/”;当我将它移到 htdocs 下的新文件夹时,这个目录变得不正确。

4

1 回答 1

1

根据文档:

使用 jQuery Mobile 的自动初始化- 与其他 jQuery 项目(如 jQuery 和 jQuery UI)不同,jQuery Mobile 在加载时自动应用许多标记增强功能 (远在 document.ready 事件触发之前)。

和...

ajaxEnabled (boolean, default: true): jQuery Mobile将尽可能通过 Ajax 自动处理链接点击和表单提交。如果为 false,url 哈希监听也将被禁用,并且 url 将作为常规 http 请求加载。

看起来它将所有链接都视为 ajax 请求,除非您falsemobileinit函数中专门设置了该选项,而您还没有。

使用下面的这个函数来强制 jQuery mobile 将所有链接视为正常http请求。

$(document).bind('mobileinit', function(){
    $.mobile.ajaxEnabled = false;
    // other options to enable on intialization
});
于 2012-12-08T19:29:37.240 回答