我查看了很多答案和其他网站,但没有人回答我的具体问题。我有一个网页" +"和" - "按钮,它应该增加一个名为" pieFact"的变量。必须动态更新此变量,而无需刷新页面。然后每次更改值时都应将其传递给我的Django视图。这将用于更新Web地图中饼图的大小。我有以下内容:
<button type="button" id=bttnMinus onclick="pieFact=pieFact*0.9">-</button>
<button type="button" id=bttnPlus onclick="pieFact=pieFact*1.1">+</button></td>
<script type="text.javascript">
var pieFact=0;
</script>
如何传递&#34; pieFact&#34;的值?去Django?基于我有限的知识,我想我可能不得不使用AJAX post / get。
答案 0 :(得分:14)
为了避免刷新页面,是的,你需要AJAX。我通常不想在答案中建议图书馆太多,但是,为了便于跨浏览器兼容,我建议使用jQuery。
<html>
...
<head>
<script>
var URL = "{% url 'my_view_that_updates_pieFact' %}";
</script>
</head>
...
您需要通过AJAX向服务器POST或获取数据。为了更加RESTful,每当我需要将数据发送到服务器时,我都使用POST。 jQuery通过POST为URL提供AJAX数据的$.post()便利功能。这三个参数是URL,要发送的数据(作为JavaScript对象;如果您对JavaScript不太熟悉,请考虑python词典),以及服务器发回响应后的回调函数。
<script>
function updatePieFact(){
var data = {'pieFact': pieFact};
$.post(URL, data, function(response){
if(response === 'success'){ alert('Yay!'); }
else{ alert('Error! :('); }
});
}
.click()
函数与在html属性中指定onlick
基本相同。两个点击事件都会按预期更新pieFact
,然后调用updatePieFact()
将pieFact
的值发送到服务器。
$(document).ready(function(){
$('#bttnMinus').click(function(){
pieFact *= 0.9;
updatePieFact();
});
$('#bttnPlus').click(function(){
pieFact *= 1.1;
updatePieFact();
});
});
</script>
由于我在JavaScript中使用了$.post()
函数,因此Django将要接收的请求将采用"POST"
的方法,因此我检查以确保方法确实是POST
(这意味着如果有人使用类似GET请求的方式访问此视图的URL,则他们不会更新任何内容)。在我看到请求实际上是POST
之后,我会检查密钥'pieFact'
是否在dict request.POST
中。
还记得我在javascript中将变量data
设置为{'pieFact': pieFact}
吗?那javascript就成了request.POST python字典。因此,如果我在javascript中使用了var data = {'hello': pieFact};
,那么我会检查if 'hello' in request.POST
。一旦我看到pieFact
在request.POST字典中,我就可以获得它的值,然后用它做一些事情。如果一切顺利,我会返回HttpResponse
字符串'success'
。这与javascript中的检查相关联:if(response === 'success')
。
def my_view_that_updates_pieFact(request):
if request.method == 'POST':
if 'pieFact' in request.POST:
pieFact = request.POST['pieFact']
# doSomething with pieFact here...
return HttpResponse('success') # if everything is OK
# nothing went well
return HttpRepsonse('FAIL!!!!!')
希望这会让你指出正确的方向。