【问题标题】:get the javascript array in django在 django 中获取 javascript 数组
【发布时间】:2012-06-14 21:40:52
【问题描述】:

这是我的代码:

urls.py:

from django.conf.urls import patterns
from views import show,showpage

urlpatterns = patterns('',
                       (r'^$',showpage),
                       (r'^show/$',show),
)

views.py

from django.http import HttpResponse
def show(request):
  arr = reqeust.GET.get('arr','Nothing')
  print arr#**it's 'Nothing'**
  if arr == 'Nothing':
    msg = 'fail'
  else:
    msg = 'pass'
  return HttpResponse(msg)

def showpage(request):
  html = '''    <html>
<head>
<script language="javascript" type="text/javascript" src="/site_media/js/jquery-1.7.2.js"></script>
</head>
<body>
<input type="button" id="input_btn"/>
</body>
<script language="javascript" type="text/javascript">
$(function(){
  $("#input_btn").bind("click",function(){
    arr = [1,2,3,4,5,6]
    $.ajax({
      type:"GET",
      url:"/show/",
      data:{arr:arr},//**I want pass the arr to django**
      success:function(data){alert(data);},
      error:function(data){alert(data);}
    });
  });
})
</script>
</html>'''
  return HttpResponse(html)

当我访问 localhost:8000 并单击按钮时,我在后端控制台中打印了“Nothing”,你知道我在前端收到消息“失败”

呃..任何人都可以解决这个问题,我想要返回一个列表([1,2,3,4,5,6])或类似的代码(arr = reqeust.GET.get('arr','Nothing')

---------append1-------

当我单击 btn 时,我在控制台中得到了这个

[12/Jun/2012 09:48:44] "GET /show/?arr%5B%5D=1&arr%5B%5D=2&arr%5B%5D=3&arr%5B%5D=4&arr% 5B%5D=5&arr%5B%5D=6 HTTP/1.1" 200 4

---------apend2--------

我这样修复了我的代码:

arr = request.GET.get('arr[]','Nothing')

我得到了 6,这是 javascript 数组的最后一个,我怎样才能得到整个数组?

提前感谢!

【问题讨论】:

  • 实际的请求 URL 是什么样的?
  • 对不起!我忘记返回html页面了,等一下
  • @Ignacio Vazquez-Abrams 我修正了我的问题并将请求 URL 放在问题内容的底部

标签: javascript jquery django arrays


【解决方案1】:

jQuery 决定在字段名称中添加方括号,这很可能适应 PHP。 Django 不需要它们,但无论如何。请改为访问 request.GET['arr[]']request.GET.getlist('arr[]')

【讨论】:

  • request.GET.getlist('arr[]') 有效!我搜索了有关请求网址 arr%5B%5D=1&arr%5B%5D=2 EQUALS arr[]=1&arr[]=2 的信息。以及 request.GET 返回 QueryDict 谢谢@Ignacio Vazquez-Abrams ^_^
【解决方案2】:

你也可以设置:

$.ajaxSettings.traditional = true;

这将使 jQuery 的行为符合实际的 HTTP 标准,该标准适用于 Django。

当您自己不打算访问 request.GET 或 request.POST(即 ajax 发布表单)时,这是必需的。

强烈建议在每个 django 项目中设置此项。

【讨论】:

  • 还是谢谢@jpic,我试试你的建议,我得到这样的请求网址:**127.0.0.1:8000/show/…**。我改变了 request.GET.getlist('arr '),我也在工作,谢谢你的建议~
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 2019-07-05
  • 2018-08-10
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 2019-03-30
  • 2020-09-18
相关资源
最近更新 更多