如何通过JS和服务器端的AJAX调用传递复合JSON结构,在python中将其读作"非常相似"的数据结构?
我知道可以使用json格式(simplejson等),但我不知何故觉得QueryDict本身在我的情况下格式错误或重新格式化?
例:
通过AJAX向Django视图传递JSON对象[{"id":1},{"id":2},{"id":3}]的数组时,QueryDict的格式为:
POST:<QueryDict: {u'json_data[0][id]': [u'1'], u'type': [u'clone'],
u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'],
u'json_data[1][id]': [u'2'], u'json_data[2][id]': [u'3']}>
Run Code Online (Sandbox Code Playgroud)
我如何迭代json_data?
我希望得到这样的东西:
POST:<QueryDict: {u'json_data': [{u'id': [u'1']}, {u'id': [u'2']}, {u'id': [u'3']}]},
u'csrfmiddlewaretoken': [u'69bb3c434ced31ab301ede04bf491ec0'], u'type': [u'clone']>
Run Code Online (Sandbox Code Playgroud)
这样我就可以将QueryDict作为字典访问并将json_data作为列表检索并按特定顺序处理它:可能只是按顺序列表顺序遍历它们.就像是:
ret = request.POST
for item in ret['json_data']:
process(item['id'])
Run Code Online (Sandbox Code Playgroud)
实际上,进入process()的值可能是另一个键值对的字典,而不仅仅是一个数字(1,2,3等)
使用Javascript:
var test = [{"id": 1},{"id": 2},{"id": 3}];
$.post(
"/insert_tc",
{
json_data: test,
"type": 'clone',
"csrfmiddlewaretoken": $csrf_token
},
function(json) {
//CALLBACK
},
"json"
);
Run Code Online (Sandbox Code Playgroud)
views.py:
def insert_tc(request):
if request.method == 'POST':
ret = request.POST
type = ret['type']
list = ret.getlist(ret)
Run Code Online (Sandbox Code Playgroud)
但是list返回空[] …
我似乎无法将垂直旋转的div一直对齐到页面的右侧:http://jsfiddle.net/F23W2/2/
HTML:
<div class="vertical">Vertical Text</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.vertical {
position: relative;
background-color: #DDDDDD;
padding: 10px;
border-radius: 5px 5px 0 0;
float: right;
-moz-transform: rotate(270deg); /* FF3.5+ */
-o-transform: rotate(270deg); /* Opera 10.5 */
-webkit-transform: rotate(-90deg); /* Saf3.1+, Chrome */
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以使用负边距来解决,但我想知道是否存在更清晰的解决方案.
JS/JQuery的:
$this.find('input').autocomplete({
source: "/autocomplete_tc_testcasename",
minLength: 2,
focus: function(e,ui){
$(this).val(ui.item.label);
return false;
},
select: function(e, ui) {
console.log("Selected: "+ui.item.value);
}
});
Run Code Online (Sandbox Code Playgroud)
CSS:
.ui-autocomplete {
max-height: 200px;
overflow-y: auto;
padding: 5px;
}
.ui-menu {
list-style: none;
background-color: #FFFFEE;
width: 50%;
padding: 0px;
border-bottom: 1px solid #DDDDDD;
border-radius: 6px;
-webkit-box-shadow: 0 8px 6px -6px black;
-moz-box-shadow: 0 0px 0px -0px black;
box-shadow: 0px 2px 2px 0px #999999;
}
.ui-menu .ui-menu {
}
.ui-menu .ui-menu-item {
color: #990000;
font-family:"Verdana";
font-size: 12px;
border-top: 3px solid …Run Code Online (Sandbox Code Playgroud) 字符,如-,+等不解析由Python的readline的字母数字ASCII字符基于CMD模块以同样的方式.这似乎只是Linux特定的问题,因为它似乎在Mac OS上按预期工作.
示例代码
import cmd
class Test(cmd.Cmd):
def do_abc(self, line):
print line
def complete_abc(self, text, line, begidx, endidx):
return [i for i in ['-xxx', '-yyy', '-zzz'] if i.startswith(text)]
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")
Test().cmdloop()
Run Code Online (Sandbox Code Playgroud)
Mac OS上的预期行为
(Cmd) abc <TAB>
abc
(Cmd) abc -<TAB>
-xxx -yyy -zzz
(Cmd) abc -x<TAB>
(Cmd) abc -xxx
Run Code Online (Sandbox Code Playgroud)
Linux上的行为不正确
(Cmd) abc <TAB>
abc
(Cmd) …Run Code Online (Sandbox Code Playgroud) ajax ×1
autocomplete ×1
click ×1
css ×1
css-float ×1
django ×1
html ×1
http-request ×1
javascript ×1
jquery ×1
linux ×1
mouse ×1
python ×1
python-cmd ×1
readline ×1
request ×1
rotation ×1
select ×1