在我看来,我有一个用户词典,我将它传递给args {}词典里面的模板(也许不是正确的方法)。 然后,当我使用AJAX调用在页面上POST数据时,我希望这个字典返回到视图(为了向它添加新条目)。如何使用JavaScript,jQuery或AJAX将其发回?
如果有人想知道我到底在做什么:
我正在为模型做一个构造函数,因此客户可以搜索用户并将它们添加到某种类别的表组中(逐个选择),但在我保存模型之前,我需要跟踪用户添加的用户。我觉得使用字典不是一个好方法,但即使它是一个列表或其他东西,我仍然不知道如何将数据保留在AJAX调用上。
对以下答案的补充
如果您遇到类似问题,可能会阅读
我最后在一个脚本中编写所有内容并注意 - 不是在文件中,而是在标记中,由于某种原因,如果从文件调用,解决方案和一些jquery函数无法按预期工作(很奇怪,我一直以为它完全没有区别)。
所以,是的,如果你按照下面的答案,你将能够将字典传回Django视图,但你将传递的东西不再是字典,它不是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
});
我认为它被称为事件委派。你把''文件'作为选择器,然后.on和括号中的第一个是动作(可以提交,点击或其他)和它发生的地方(形式,div等,可能你可以使用任何选择器)。对不起,如果描述很愚蠢,我是jquery的新手 我希望这有帮助...在一个页面上的多个ajax请求是痛苦的屁股:)
答案 0 :(得分:1)
假设您已将d中的字典从视图传递到模板
{'d': data_dict}
现在首先将此字典存储在javascript变量中,如下所示。
$(document).ready(function(){
var my_data = "{{ d }}"
});
然后在数据属性的ajax调用中传递此变量。
$.ajax({
url: "your url",
type: "POST",
data:{'data_dict':my_data}
.......
});
让我知道这有效吗?让我知道。 可能你必须使用json.stringyfy和json.loads。
答案 1 :(得分:0)
你可以这样做。
$.ajax({
url: "url-of the-view",
type: "POST",
data:{'data_dict':your_dict,}});
然后在你的视图中,你可以像:
一样处理它if request.method=='POST':
data_dict = request.POST.get('data_dict')
你可以对data_dict做任何你想做的处理。