【问题标题】:jQuery, AJAX post Javascript array with JSONjQuery,AJAX 使用 JSON 发布 Javascript 数组
【发布时间】:2013-12-17 03:00:18
【问题描述】:

我有一个 Javascript 变量,它是一个数组(我将字符串推入其中),我必须通过 AJAX jQuery.POST() 方法将该列表发送回服务器:

var user_list = new Array();
user_list.push("42");
var data = { user_list: JSON.stringify(user_list)};
$.post('/accounts/ajax/user_verification/', data)
    .done( my_cb );

在服务器中,我正在运行 Django 并尝试使用以下视图解码 POST 请求:

@login_required
def user_verification(request):

    if not request.POST.has_key('user_list'):
        print (__name__ + ', user_verification, raising BadRequest.')
        raise Exception("'user_list' not found as a POST parameter.")

    value = unicode(request.POST['user_list'])
    print (__name__ + ', value, v = ' + value)
    user_list = json.loads(request.body) 

我得到以下输出和“ json.loads(request.body) ”抛出的后验异常:

accounts.ajax, value, v = ["42"]
ValueError: No JSON object could be decoded

["42"] 不是具有单个元素的有效 JSON 数组定义吗?

【问题讨论】:

  • 尝试传递 {"42"} 而不是 ["42"]
  • 但是我使用的是 JSON.stringify(),它的输出不正确吗?
  • 尝试将 JSON 结构中的“键”user_list 更改为其他内容。它可能会导致问题。另外,为了安全起见,您能否将 JSON 更改为 var data = { "newKey": JSON.stringify(user_list)}

标签: javascript jquery django json


【解决方案1】:

我在这里可能完全错了,但在我看来,你试图解码一个错误的东西。如果我没记错的话,你 request.body 看起来像这样:

user_list=["42"]

如果您尝试对此进行解码,则会遇到问题。那么为什么不从变量值中解码值呢?

user_list = json.loads(value) 

【讨论】:

    【解决方案2】:

    我对 Django 一无所知,所以,这完全是猜测:D

    import json
    ...
    value = json.load(request.POST['user_list'])
    

    【讨论】:

    • 是的,我认为为时已晚......我在将参数传递给 json.load() 时犯了一个错误。
    • @Ricardo 我刚刚意识到还有另一个名为loads 的函数,并且您已经在使用它,所以,我显然有点跑题了(再一次):D 很高兴如果它在某种程度上有所帮助。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2012-05-30
    相关资源
    最近更新 更多