我有一个Django Web应用程序,它使用PythonAPI连接到第三方服务来分析文本数据。用户写入文本区域,按下按钮,然后将文本发送到返回JSON对象列表的服务。对此服务的API调用是Python函数。当按下按钮时,我试图使用Ajax对Python函数进行异步调用,使用文本数据作为Param。
我现在还没有试着调用第三方服务。我只是想看看我能否从Python那里得到一个响应,发送输入和接收输出。
我发现的大多数示例都涉及创建表单并提交表单,这样Django框架就会自动调用它的Python函数。表单并不是我想要构建的,我也不想进入一个新的页面来查看结果或者刷新当前的页面。
<!-- index.html -->
<html>
<head>
<title>Test Data</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
document.getElementById("Button").addEventListener('click', analyzeText());
function analyzeText(){
var text = document.getElementById('text-to-analyze').value;
$ajax({
type: "POST",
url: "/models.py", /* Call python function in this script */
data: {param: text}, /* Passing the text data */
success: callback
});
}
function callback(response){
console.log(response);
}
</script>
</head>
<body>
<textarea id="text-to-analyze" rows="12" cols="100"></textarea><br>
<button id="button" value="Analyze"/>
</body>
</html>
# models.py
from django.db import models
# Function I want to call from Ajax
def testcall():
return 'test successfull'
发布于 2018-08-02 13:14:56
当你向服务器发出Ajax请求时,服务器会使用一些数据进行响应,或者呈现一个模板。
要使请求响应周期正常工作,你必须创建url到控制器逻辑的映射。你要在urls.py中创建url和python函数映射,python函数将位于views.py中。现在,当你使用给定的方法(POST或GET)请求该url时,它将调用映射函数并返回结果。
发布于 2018-08-02 14:47:48
在urls.py
创建一个url
path('my-ajax-test/', views.myajaxtestview, name='ajax-test-view'),
那么Ajax应该看起来像
注意csrf_token
:
$ajax({
type: "POST",
url: '{{ url 'ajax-test-view'}}',
data: {csrfmiddlewaretoken: '{{ csrf_token }}',
text: "this is my test view"}, /* Passing the text data */
success: function(response){
alert(response);
}
});
views.py
def myajaxtestview(request):
return HttpResponse(request.POST['text'])
https://stackoverflow.com/questions/-100008740
复制相似问题