【问题标题】:Storing data for a POST request in href - bad practice?在 href 中存储 POST 请求的数据 - 不好的做法?
【发布时间】:2013-04-13 01:08:35
【问题描述】:

我正在编写一个 node.js 应用程序,并且有点担心我如何构建发布数据以发送到服务器。例如,当我想删除一个数据项时,我将该项的 id 放在 href 属性中:

<a class='delete' href="1231">Delete this data</a>
<!-- href is based on a variable I'm pulling from the server -->

单击该链接时,我会阻止默认操作,然后运行 ​​ajax 请求:

//On click + ajax
body.on('click', '.delete', function(e){
e.preventDefault();
    $.ajax({
        type: 'POST',
        url: '/admin/report/detail/delete',
    data: {id: $(this).attr('href')},
    success: function(){
        //Success message
    },
    error: function(){
        //Error message
    }
});
});

我想知道,以这种方式使用 href 属性是不好的做法吗?如果是这样,存储这些数据的最佳方式是什么?

【问题讨论】:

    标签: jquery ajax node.js


    【解决方案1】:

    改用数据属性。将它们存储在 href 中不是语义,如果您有时想存储 ID,而在其他时间存储其他数据怎么办?您可以创建任意数量的数据属性,并为其赋予语义名称。

    <a class="delete" data-id="1231" href="#">
    

    然后在你的javascript中:

    ...
    data: { id: $(this).data('id') }
    ...
    

    data: { id: $(this).attr('data-id') } 
    

    【讨论】:

    • 谢谢,这正是我的想法。我的href应该只是一个简单的'#'吗?
    • 是的,哈希是 ajax 锚最常见的 href。我总是使用#。你也可以使用javascript:;,但这会污染你的html并且是不必要的。
    【解决方案2】:

    说实话,无论你怎么做,你总是必须将要删除的记录的 ID 发送到服务器。即使您使用数据属性,这也不是问题所在,而是您通过 AJAX“通过线路”发送数据,以便人们可以看到 ID。

    您需要考虑一下 - 好吧,这个 ID 是可以更改的,但无论您多么聪明,人们都会找到一种方法来更改它并可能删除不同的客户 ID...所以...总是 strong>确保您进行了相关的安全检查服务器端,即当前登录的用户是否能够删除正在发送的用户 ID?

    【讨论】:

    • 对此+1,我的回答都是关于语义的,但如果有关于安全性的问题,这个答案是正确的。
    • 和 +1 给你的,你比我更理解这个问题,我把它放在安全环境中。
    • 是的,我已经在服务器端进行了身份验证。实际上,我正在将所有这些删除请求从 GET 转换为 POST(不要问我第一次编写代码时的想法)。
    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2011-10-22
    • 2021-01-10
    • 2021-07-10
    • 2014-01-18
    • 2021-11-08
    相关资源
    最近更新 更多