jquery - 如何将字典发送回 Django View ?

标签 jquery ajax django django-forms django-views

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




在我看来,我有一个用户字典,我将它传递给 args{} 字典中的模板(可能不是正确的方法)。
然后,当我使用 AJAX 调用在页面上发布数据时,我希望该字典返回 View (以便向其中添加新条目)。如何使用 JavaScript、jQuery 或 AJAX 将其发回?

如果有人想知道我到底在做什么:
我正在为模型做一个构造函数,因此客户可以搜索用户并将它们添加到某种组表中(一个接一个地选择),但在我保存模型之前,我需要跟踪客户添加的用户。我觉得为此使用字典不是一个好方法,但即使它是一个列表或其他东西,我仍然不知道如何在 AJAX 调用中保留数据。

对下面给出的答案的补充
如果您有类似的问题,请阅读
我最终在一个脚本中编写了所有内容并记下 - 不是在文件中,而是在标签中,由于某种原因,如果从文件中调用,解决方案和一些 jquery 函数无法按预期工作(奇怪,我一直认为这完全没有区别)。
所以是的,如果您按照下面的答案,您将能够将字典传递回 Django View ,但是您将传递的内容不再是字典,它不是 unicode 字符串。您需要将其转换回字典(如果您以后需要像字典一样使用它)。
您可以使用以下代码执行此操作:

import ast
received_dict = request.POST['received_dict']
newdict = ast.literal_eval(received_dict)

但要小心,尝试在您的页面上输出字典(最初发送的)以进行调试。出于某种原因,有时它可能包含 ' 而不是“' ”,我相信如果你将它传递给 .js 文件而不是传递它会发生(也许是其他原因,不记得了)。因此,如果您拥有它,您可能需要在 ast.literal_eval 函数之前执行此操作:
received_dict= received_dict.replace("u'", "'") # Maybe you need to delete u also, try for yourself
received_dict = received_dict.replace("'", "'")

但我不使用它,如果 Javascript 在页面本身内部,它似乎可以通过一切。

此外,如果有人想知道我在从 AJAX 生成的 html 获取值到脚本时遇到问题,jquery 看不到 id 和东西。我通过改变这个解决了我的问题(使用它作为模板):
$('form').on('submit', function(e) {
        // some stuff
    });

对此:
$(document).on('submit', 'form', function(e) {
          // notice changes
            });

我认为它被称为事件委托(delegate)。您将“文档”作为选择器,然后 .on 和括号中的第一个是操作(可以是提交、单击或其他)以及它发生的位置(表单、div 等。可能您可以使用任何选择器)。抱歉,如果描述很愚蠢,我是 jquery 的新手。
我希望这会有所帮助...一页上的多个 ajax 请求令人头疼:)

最佳答案

假设您已将 d 中的字典从 View 传递到模板

{'d': data_dict}

现在首先像这样将这个字典 d 存储在 javascript 变量中。
$(document).ready(function(){
var my_data = "{{ d }}"
});

然后在数据属性的ajax调用中传递这个变量。
                  $.ajax({
                    url: "your url",
                    type: "POST",
                    data:{'data_dict':my_data}
                    .......
                  });

让我知道这是否有效?让我知道。
可能你必须使用 json.stringyfy 和 json.loads。

关于jquery - 如何将字典发送回 Django View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29454861/

相关文章:

具有多个实例的javascript对象文字模式

django - 在创建 View 中迭代模型并返回内联表单集

javascript - 上传错误信息

javascript - jQuery Thickbox 问题

javascript - AJAX 加载器动画未显示

django - 在 Nginx 配置中设置自定义 header 并将其传递给 gunicorn

python - Django Python - Itertools 没有使产品与拍卖销售额保持一致

javascript - 文本换行到列

javascript - 单击切换选定的 div 的类并更改未选定的 div 的类

jQuery Slide to left right on a spitted Page