如何解决Django - 从 javascript 传递数据以查看并重定向到新的 url
在我的网页上有 2 个按钮 - A 和 B。我想捕获用户在前端单击的按钮并将其发送回服务器,以便我可以为用户生成适当的令牌。然后将用户重定向到正确的 url - "/A" 或 "/B",具体取决于他们点击的内容。
urls.py
path('buttonTest/',buttonView),# Initially testing with one url
视图.py
def buttonView(requests):
if requests.method == 'POST':
clicked_button_val = requests.POST.get('clicked_button')
# generate auth token
render(requests,'test.html')
test.html
<form id="testform">
<button name="subject" id="A" type="submit" value="A">A</button>
<button name="subject" id="B" type="submit" value="B">B</button>
</form>
<script>
$("button").click(function() {
$.ajax({
type: "POST",data: {
"clicked_button": $(this).val(),},success: function(result) {
alert('ok');
},error: function(result) {
alert('error');
}
});
});
</script>
我能够成功地将数据从前端传递到视图。但 url 不会重定向到 /buttonTest。如果我像这样在 html 中添加重定向,
<button name="subject" id="A" type="submit" value="A" onclick="location.href='/buttonTest'">A</button>
然后 views.py 中的请求变成了 GET 请求并且无法访问用户点击的内容。
我想要做的是通过 POST 请求捕获用户点击的按钮,然后将用户重定向到新的 url 并将在 POST 请求中捕获的数据传递给新的 url 并查看。
解决方法
很可能你的 ajax 请求甚至没有被使用,因为你的按钮有 type="submit"
并且你永远不会阻止表单提交。最简单的方法是使用 JavaScript 在按钮和 forego 上设置不同的 name
属性:
<form id="testform">
<button name="submit_A" id="A" type="submit" value="A">A</button>
<button name="submit_B" id="B" type="submit" value="B">B</button>
</form>
现在在视图中:
def buttonView(request): # request should be singular(naming convention)!!
if request.method == 'POST':
if 'submit_A' in requests.POST:
# generate auth token for button A and redirect
elif 'submit_B' in requests.POST:
# generate auth token for button B and redirect
render(requests,'test.html')
,
您不能在重定向中包含数据,因为重定向会触发 GET 请求。
然而,您可以添加 formaction
属性来提交输入以将相同的表单提交到不同的网址
<input type="submit" formaction="/handle-a/" value="A">
<input type="submit" formaction="/handle-b/" value="B">
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。