如何通过 jQuery 在 POST 请求中传递动态 URL?

How can I pass a dynamic URL in a POST request via jQuery?

我正在尝试这样做:

<script>
 $(document).ready(function() {
    $(".delete_button").click(function() {
        var id = $(this).attr('id');
        $.ajax({
            type: "POST",
            url: "/accounts/{{ request.user.username }}/profile_listview",
            data: { entryname:id },
            success: function(response){
                alert(response.success);
            }
        });
        return false;
    });
});
</script>

但我需要找到一个解决方案来传递动态 URL,因为 Django 模板变量在这种情况下不起作用。我怎样才能做到这一点?

如果您需要传递的变量始终相同(例如 request.user.username 对一个用户始终相同),您可以渲染一个 javascript 对象,其中包含您需要的所有选项访问构建您的 url。

<script type="text/javascript">
    var __MYAPP_CONFIG__ = {
      username: JSON.stringify({{ request.user.username }})
    };
</script>

然后,在您的脚本中,您可以通过访问 my_app.username.

来引入该动态部分
$.ajax({
    # ...
    url: "/accounts/" + window.__MYAPP_CONFIG__.username + "/profile_listview",
    # ...
});

我喜欢这种方法的地方在于它(在我看来)为随时间增长的项目提供了一个相当通用的结构。对于足够大的站点,我大多数情况下最终只有一个配置对象,其结构如 my_project.my_app1.optionsmy_project.my_app2.options 等。这样一来,所有可能需要它的应用程序都已命名空间,并且我有一个中心位置,我可以在其中放置知道找到我的选择。

也许您可以使用 html5 的数据属性,例如:

<a class="delete_button" ... data-url="{% url 'my_url_name' username=request.user.username %}">Delete</a>

这样更干。

然后,在脚本中,您将该数据用作 url 到 post 到:

$.ajax({ type: "POST", url: $(this).data('url'), data: { entryname:id }, success: function(response){ alert(response.success); } });