jQuery Mobile 1.1.0 RC1 在 iOS Safari 中修改 AJAX 帖子的 HREF

Posted

技术标签:

【中文标题】jQuery Mobile 1.1.0 RC1 在 iOS Safari 中修改 AJAX 帖子的 HREF【英文标题】:jQuery Mobile 1.1.0 RC1 Modifying HREF for AJAX Posts in iOS Safari 【发布时间】:2012-04-10 11:50:25 【问题描述】:

免责声明:我使用的 jQuery Mobile 1.1.0 RC1 还不是一个稳定的版本。我有一个需要发布 AJAX 请求并返回 JSON 响应的链接,但是当单击该链接时,似乎 jQuery Mobile 在 iPhone 上的 ios Safari 中将 HREF 更改为哈希 (#)。在使用 iPhone 用户代理在浏览器中进行测试时,它不会这样做。这是我的基本 html 和 JS 来展示我所拥有的:

<a href="/link/to/ajaxpost/">Send Ajax Request</a>

和 JS

$('#tab a').on('click', function(e)
        var $this = $(this);
        var jsonUrl = $this.attr("href");
        alert(jsonUrl);

        $.mobile.showPageLoadingMsg();

        $.ajax(
            type: "POST",
            url: jsonUrl,
            success: function(data) 
                $.mobile.hidePageLoadingMsg();
                alert(data);
            
        );
        return false; 
);

“jsonUrl”的值变为“#”(而不是我的 ajax 请求的 url),然后 data 变量的值返回整个页面,而不是我想要的 JSON 提要。奇怪的是,这只发生在 iPhone 上的 iOS Safari 中。当我在 OSX Safari 或 Firefox 中使用不同的用户代理尝试 jQuery Mobile 站点时,它工作正常并且 JSON 提要返回。

我尝试将 rel="external" 和 data-type="ajax" 添加到链接中,但没有解决。我也在使用 jQuery Mobile 1.1.0 RC1,但我不确定这是否是问题所在,或者我只是没有正确使用 jQuery Mobile。我的代码中也没有任何其他 jQuery Mobile 特定的 JS,所以也许我错过了一些可以解决这个问题的东西。感谢您的帮助。

【问题讨论】:

我知道我可以将链接的 URL 放在数据属性中,然后用 jQuery 调用它,但必须有更好的方法来做到这一点。我不想为每个链接都输入数据属性。 也试过 $(document).bind("mobileinit", function() $.mobile.ajaxEnabled = false; );但没有运气 我无法复制您的问题。 jsfiddle.net/sDh4k/3 @r0m4n 谢谢!你只是提醒我尝试不同版本的 jQuery Mobile,因为我使用的是 RC1.1。我发现该错误仅发生在最新版本中,而不发生在现有稳定版本中:此示例使用 jQuery Mobile 1.0.1 并适用于 iOS Safari(您的 jsfiddle):jsfiddle.net/sDh4k/3 这使用 1.1.0 RC1 并替换 HREF在 iOS Safari 中使用哈希,这会破坏 AJAX 帖子:jsfiddle.net/sDh4k/6 不确定发生了什么,但也许 jQuery Mobile 忽略了 rel="external" 或任何其他方法来单独保留链接?如果我将事件更改为 vclick (jsfiddle.net/sDh4k/8) 它会起作用,那么将其用作点击事件的解决方案是吗?或者有更好的方法吗? 【参考方案1】:

代替:

$this.attr('href')

使用这个:

$this.data('href') || $this.attr('href')

jQuery Mobile 1.1.0RC1 及更高版本(包括已发布的 1.1.0)将在单击时将 href 设置为指向 # 的任何链接,并将 href 存储在 data-href 属性中,直到完成操作,然后放回去。 它只在 iOS Mobile Safari 上这样做。

我已经在博客上写了更多关于此的内容,其中包含相关 github 问题讨论的链接以及有关在此处将其与 Ruby on Rails jQuery UJS 应用的一些信息:

http://scottwb.com/blog/2012/06/29/jquery-mobile-breaks-your-hrefs-on-ios-mobile-safari/

【讨论】:

以上是关于jQuery Mobile 1.1.0 RC1 在 iOS Safari 中修改 AJAX 帖子的 HREF的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile 页面加载事件委托 javascript 触发两次

如何使用 Backbone.js 在 changePage 后显示 JQuery Mobile 主页面

用啥代替 $.mobile.changePage()?

jQuery Mobile中jQuery.mobile.changePage方法使用详解

jquery mobile,结合jquery mobile“页面”和内部页面

如何使用 jquery 或 jquery mobile mobile 根据日期列出数据