javascript - 将值从 JavaScript 传递到 Django view.py
问题描述
描述:我创建了一个页面。该页面在http://127.0.0.1:8000/上运行。有三种形式。我有一个单独的按钮。当我单击该按钮时,需要在 Django view.py 中收集所有三个表单值。但是我遇到了 ajax 请求响应问题。值 arry1D 未在 Django view.py 中获取
下面是单独的按钮。
<form method="post">
{% csrf_token %}
<input class="bg-yellow text-white" value="RUN" name="runModel" type="submit"
onclick="sendValuesToBack()">
</form>
下面是 JavaScript 方法。
function sendValuesToBack()
{
let j,
i,
arry1D = [];
for(j=0;j!=countName;j++)
{
var inputs = document.getElementById("formId" + j).elements;
if (!arry1D[j]) arry1D[j] = []
arry1D[j][0] = "formId" + j;
console.log("---------------Form--------------------");
for (i = 0; i < inputs.length; i++) {
if (inputs[i].nodeName === "INPUT" && inputs[i].type === "text") {
console.log("values of form:", inputs[i].value);
arry1D[j][i + 1] = inputs[i].value;
}
}
}
var tk = $(this).attr("data-token")
$.ajax({
url: "/",
type:"POST",
data:
{ 'arry1D':arry1D,
'csrfmiddlewaretoken': tk},
cache:false,
dataType: "json",
success: function(resp){
alert ("resp: "+resp.arry1D);
}
});
}
view.py --> 来自 Django 的函数
if request.method == "POST" and request.is_ajax():
arry1D = request.POST.get('arry1D')
return HttpResponse(json.dumps({'arry1D': arry1D}), content_type="application/json")
网址.py
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index,name="index"),
path('',views.getModelAttribute,name="index"),
]
错误
Internal Server Error: /form-post
Traceback (most recent call last):
File "C:\Users\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\views.py", line 39, in getModelAttribute
return JsonResponse(json.dumps({'arry1D': arry1D}), content_type="application/json")
AttributeError: module 'django.core.serializers.json' has no attribute 'dumps'
[24/Jun/2020 15:34:30] "POST / HTTP/1.1" 200 16236
解决方案
您有多个具有相同名称的路线。将 URL 更新为类似的内容(假设名为“form_post”的 URL 是您发送表单数据的位置):
urlpatterns = [
path('admin/', admin.site.urls),
path('/',views.index,name="index"),
path('/form-post/',views.getModelAttribute,name="form_post"),
]
然后,在模板中的 javascript 中:
$.ajax({
url: "{% url 'form_post' %}",
type:"POST",
data:
{ 'arry1D':arry1D,
'csrfmiddlewaretoken': tk},
cache:false,
dataType: "json",
success: function(resp){
alert ("resp: "+resp.arry1D);
}
});
最后,在发回数据时使用JSONResponse()
而不是。HttpResponse()
推荐阅读
- java - 仅删除表中的一行 - SpringBoot & Java & Thymeleaf
- node.js - 模型和关联如何与外键相关?
- sql - 在递增值时选择和更新表中的行
- google-cloud-platform - 将 TPU 与 PyTorch 一起使用
- scala - Gradle 错误:路径为“无法在根项目”中找到的项目
- javascript - Here Maps api:如何在地图上显示当前中心(JavaScript)
- spring-boot - 如何从授权码 OAuth2 中获取电子邮件地址
- javascript - 如何正确“toDate()”Firestore 时间戳的大型文档?
- git - Azure DevOps - 组合项目的克隆命令是什么?
- c++ - 在运行时为动态分配的内存输入值