我早上花了很多时间通过几个教程并在这里阅读相关问题,但我似乎仍然无法做到这一点。我已经创建了一个简化版本,我只需要尝试了解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>
urls.py
url(r'^multiply$', 'prof_pages.views.multiply'),
multiply是app prof_pages
的views.py中定义的函数views.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错误
我不完全确定我的网址设置正确;如果不是我不确定在哪里可以看。
非常感谢提前。
答案 0 :(得分:0)
#user_first_name, #user_last_name {
background-color: #f2f2f2;
border: none;
width: 100%;
padding: 10px;
margin: 5px 0px 10px 0px;
display: inline-block;
}
#user_time_zone {
background-color: #f2f2f2;
border: none;
width: 100%;
margin: 5px 0px 10px 0px;
padding: 10px;
border-radius: 0;
}
和aNumber
。你的意思是:
bNumber
答案 1 :(得分:0)
在对追溯进行进一步审查之后,我注意到生成500错误的问题是乘法函数没有执行。这是因为数据被作为str类型引入,我认为这是默认值。通过向request.POST调用添加正确的数据类型float,解决了问题。所以我的views.py现在看起来像这样:
http://127.0.0.1:8000/profile/multiply
我的代码的另一个更改是在urls.py中我发现完整的请求网址如下所示:
url(r'^profile/multiply$', 'prof_pages.views.multiply'),
所以我的urls.py现在看起来像这样:
#include <iostream>
#include <string>
using namespace std;
struct Box {
int l;
int w;
Box();
Box(int a, int b);
int area();
Box operator+(const Box a)
{
return Box(a.l + l, a.w + w);
}
};
Box::Box() {
l = 0;
w = 0;
}
Box::Box(int a, int b) {
l = a;
w = b;
}
int Box::area() {
return l * w;
}
int main() {
Box a(1, 2);
Box b;
b.l = 3;
b.w = 4;
Box c = a + b;
cout << "Total area is: " << a.area() << " + " << (b.area()) << " = " << (c.area()) << endl;
}
感谢所有回复的人。
此致