无法将 ajax json 发布请求发送到 django 视图

Posted

技术标签:

【中文标题】无法将 ajax json 发布请求发送到 django 视图【英文标题】:Unable to send ajax json post request to django view 【发布时间】:2015-10-16 15:01:47 【问题描述】:

我正在尝试使用 ajax 发送 json

阿贾克斯:

$.ajax(
                 type:"POST",
                 url:"../create_folder/",
                 data: 
                        //csrfmiddlewaretoken: " csrf_token ",
                        sharedfolder // from form
                        ,
                        contentType: "application/json",
    dataType: "json",
    success: function(data) 
        debugger;
        $("#folder_create").dialog('close');
        $("#folder-details").pqGrid("refreshDataAndView" );
    ,
    error: function(data)
        debugger;
        alert("fail");

            
        );
            return false;

到一个视图:

@csrf_exempt
def create_folder(request):
  c = 
  c.update(csrf(request))
  data = request.POST["sharedfolder"]
  print type(data)
  return HttpResponse(sf,content_type="application/type")

我收到此错误:

MultiValueDictKeyError at /create_folder/ "'sharedfolder'" 请求 方法:GET 请求地址:http://localhost:8000/create_folder/Django 版本:1.6.1 异常类型:MultiValueDictKeyError 异常 值:“'sharedfolder'”异常 位置:/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py 在 getitem 中,第 301 行 Python 可执行文件:/usr/bin/python Python 版本:2.7.6 Python 路径: ['/home/celestial/Documents/celestial_NAS', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] 服务器 时间:2015 年 7 月 26 日星期日 10:30:24 +0000

可能是什么错误?

【问题讨论】:

您似乎收到了GET 对服务器的请求? 您能提供表格吗? 【参考方案1】:

您似乎没有正确地将 sharedfolder 参数传递给 AJAX 脚本,因此当您尝试使用 data = request.POST["sharedfolder"] 访问它时,您会收到 Key Exception 错误。

通常在 AJAX 调用中使用 data 属性时,您会使用键值对,例如

sharedfolder: sharedfoldervalue

其中sharedfoldervalue是从表单提交中获得的。

【讨论】:

这是我的共享文件夹 json "sharedFolder": "sharedFolderName" :"test1", "ownerName" :"amit", "volumeName" :"temp", "description" :"这只是描述部分", “uniqueID”:“0”,“public”:“yes”,“服务”:“wiki”:“yes”,“cifs”:“yes”,“ftp”:“yes”,“nfs”:“是”,“rb”:“是”,“ms”:“是”,“afp”:“是”,“webdav”:“是”,“加密”:“是”,“备份”:“ rName":"test2", "rPasswd":"testing2" 我所做的更改 data: data: //csrfmiddlewaretoken: " csrf_token ", sf : sharedfolder // from form , in views.py data = request.POST.get(' sf') 现在我收到如下错误:/create_folder/ 全局名称 'sf' 处的 NameError 未定义【参考方案2】:

看来你不是通过AJAX发帖。我的意思是你的回溯中有GET请求。所以request.POST将是。这就是你收到这个错误的原因。所以检查

<form >
whatever
<button type="submit"> or even no type attribute
</form>

上面改为

<button type="button">

【讨论】:

【参考方案3】:

几天前我收到了这个错误。

使用 request.POST.get("sharedfolder") 的 request.POST["sharedfolder"]

【讨论】:

以上是关于无法将 ajax json 发布请求发送到 django 视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JQuery AJAX 请求中的数据发送到 Node.js 服务器

使用 ajax 将 JSON 发送到 PHP

如何使用 jQuery $.ajax 将请求参数数组发送到 servlet?

使用ajax请求发布大型JSON对象

如何将 Ajax 请求发送到同一服务器的不同 url

Ajax 发布到 Flask - json [重复]