1

我目前依靠锚标记在我的 Web 应用程序上执行 AJAX 请求(使用 jQuery)。例如:

<script type="text/javascript">
    $(document).ready(function() {
        $("#test").click(function() {
            // Perform AJAX call and manipulate the DOM
        });
    });

    <a id="test" href="">Click me!</a>
</script>

但是,如果用户在他们的浏览器中禁用了 javascript,这些锚标记几乎就变得毫无用处了。处理这些锚标记的优雅降级的最佳方法是什么?我唯一的选择是将它们全部切换到表单标签内的按钮吗?

编辑:我应该更清楚,并指定我的 AJAX 调用是对一个 URL 的 HTTP POST,出于安全原因,我不能向正常的 HTTP GET 公开(例如,考虑删除 URL“/items/delete/1”)。考虑到这一点,我不能将锚的 href 更改为“/items/delete/1”,以满足关闭 javascript 的用户,因为它会带来安全风险。

4

5 回答 5

6

一种选择(我相信我会被否决)是不要打扰那些关闭了 javascript 的人。在标签中显示一条消息,<noscript>通知用户您的网站需要 Javascript。

它会影响两组人:那些故意禁用 javascript 并且大概知道如何重新打开它的人,以及那些在较旧的移动设备上查看您的网站的人。

在您花费数小时为他们开发之前,请考虑这些人的重要性。

于 2009-01-21T22:34:58.573 回答
3

很简单,不要使用 javascript: URI 语法作为 href,至少不要在交付给客户端的 HTML 中使用。

从服务器传递 HTML 并使用 href 将用户带到您想要获取的任何页面,然后替换锚标记的 href(或捕获 onclick 事件)并做任何您想做的事情,确保防止默认操作对于事件火灾。

<script type="text/javascript">
    $(document).ready(function() {
        $("#test").click(function(e) {
            // Perform AJAX call and manipulate the DOM
            e.preventDefault();
        });
    });

    <a id="test" href="/Proper/URI">Click me!</a>
</script>

我完全同意阅读 Unobtrusive JavaScript 的建议。

于 2009-01-21T22:25:07.233 回答
3

我一直在寻找的答案隐藏在其中一条评论中:

您使用<a>标签执行 HTTP POST 操作是有冲突的。<a>专为 HTTP GET 设计。如果您将操作的语义嵌入<a>标签中,您将不会在这里找到满意的答案。见 http://www.w3.org/2001/tag/doc/whenToUseGet.html

于 2009-01-21T22:46:06.070 回答
1

阅读Unobtrusive JavaScript以了解如何将 JS 行为与您的实际标记分开。我发布的任何其他内容都只是对其他人在其他地方说得更好的话的重述

于 2009-01-21T22:22:59.640 回答
1

没有 JS 的最佳选择可能是有一个带有提交按钮的表单,并将表单的操作指向您的 URL。

您可以设置按钮的样式,使其看起来像一个链接(或其他任何东西):

<button class="linkstyle" type="submit">Foo</button>
<style type="text/css">
button.linkstyle { border:none; background:none; padding:0; }
<style>

Particletree 的文章中有一个很好的按钮样式示例:重新发现按钮元素

于 2009-01-21T23:11:12.773 回答