我花了早上的大部分时间浏览了几个教程并阅读了这里的相关问题,但我似乎仍然无法正确理解这一点。我创建了我需要做的事情的简化版本,只是为了尝试了解 ajax 的工作原理。简而言之:我想将两个数字传递给views.py 中的函数。这个简单的函数会将这两个数字相乘并将它们发回。这是我到目前为止所做的:
html:
<button type="button" onclick="mathIt()">Send Test Data</button>
{% csrf_token %}
<p id="test"> Test</p>
<script>
function mathIt() {
var aNumber = 5;
var bNumber = 15;
// alert ("Two numbers: "+aNumber+" and "+bNumber);
$.ajax({
method: "POST",
url: "/multiply",
data: {
csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
aNumber: aNumber,
bNumber: bNumber,
},
success: function(data) {
alert ("Congrats! You sent some data: "+data);
},
error: function() {
alert ("Something went wrong");
}
});
document.getElementById("test").innerHTML = result_mult;
}
</script>
url.py
url(r'^multiply$', 'prof_pages.views.multiply'),
multiply是app prof_pages的views.py中定义的函数
View .py
def product(a1,a2):
return float(a1 * a2)
def multiply(request):
if request.is_ajax():
try:
b1 = request.POST['aNumber']
b2 = request.POST['bNumber']
except KeyError:
return HttpResponse('Error') # Incorrect Post
result_mult = product(b1,b2)
return HttpResponse(result_mult)
else:
raise Http404
当我单击该按钮时,会显示错误消息,并且控制台上的 POST 方法收到 500 错误。当然网络监视器也显示 500 错误
我不完全确定我的网址设置正确;如果不是,我不知道还能去哪里寻找。
提前非常感谢。
最佳答案
在对回溯进行进一步审查后,我注意到生成 500 错误的问题是乘法函数未执行。这是由于数据被作为 str 类型拉入引起的,我认为这是默认的。通过将正确的数据类型 float 添加到 request.POST 调用,问题得到了解决。所以我的views.py 现在看起来像这样:
def multiply(request):
if request.is_ajax():
try:
b1 = float(request.POST['aNumber'])
b2 = float(request.POST['bNumber'])
except KeyError:
return HttpResponse('Error') # Incorrect Post
result_mult = b1 * b2
return HttpResponse(result_mult)
else:
raise Http404
我的代码的另一个更改是在 urls.py 中,我注意到完整的请求 URL 如下所示:
http://127.0.0.1:8000/profile/multiply
因此我的 urls.py 现在看起来像这样:
url(r'^profile/multiply$', 'prof_pages.views.multiply'),
感谢所有回复的人。
问候
关于jquery - Ajax POST 到views.py 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33454243/