jquery - Ajax POST 到views.py 函数

标签 jquery python ajax django

我花了早上的大部分时间浏览了几个教程并阅读了这里的相关问题,但我似乎仍然无法正确理解这一点。我创建了我需要做的事情的简化版本,只是为了尝试了解 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/

相关文章:

jquery - 打开一个新的弹出窗口并向其发布数据

javascript - 在 ASP.NET 中使用 AJAX 将现有的 div 替换为另一个 div

jquery - 无法将数组作为表单参数发送

jquery - 添加许多 "p"标签

javascript - 使用 JavaScript 使链接保持事件状态并在单击时显示悬停效果

javascript - Symfony:通过 GET 将变量从 Ajax 发送到处理程序

javascript - 通过 AJAX (jQuery) 发布 URL

python - 仅替换列表 python 中的几个字符

python - PyPDF2 无法读取非英文字符,在 extractText() 上返回空字符串

python - 从 element.ResultSet 中提取项目