我试图将一个数组发送到cherrypy,但结果是空的。
这是我的js文件。我已经检查过,数组已按预期填充。
$(function () {
$('#mark-read').on('click', function (e) {
alert_ids = [];
$("input:checkbox[name=alert-cb]:checked").each(function() {
alert_ids.push($(this).attr('id'));
});
$.ajax({
type: 'POST',
url: 'markasread',
data: { alerts: alert_ids },
traditional: true,
success: function (data) {
alert(data);
}
});
});
});
这是最精彩的部分(我用这个 answer 作为指导)
@cherrypy.expose
def markasread(self, **alerts_ids):
""" Mark alerts as read """
a_ids = alerts_ids.pop('alerts[]', [])
alerts.mark_as_read(a_ids)
return json.dumps(a_ids)
这是从上面的 python 代码中调用的函数
def mark_as_read(alerts):
alerts_file = ET.parse(ALERTS_FILE)
root = alerts_file.getroot()
for a_id in alerts:
alert = root.find("./alert[@id='" + a_id + "']")
alert.set('status', 'watched')
alerts_file.write(ALERTS_FILE)
我的目标是将数据保存到 xml 文件。我已经设法使用类似的代码保存到 xml 文件。问题是 for 循环中的“alerts”为空,这意味着该数组没有通过 ajax 调用(至少这是我的猜测)。
有什么想法吗?
最佳答案
您应该简单地使用 data: {alerts:alert_ids}
调用 $.ajax
而不是 data: JSON.stringify({alerts:alert_ids})
.
此外,删除 contentType : "application/json",
行。 CherryPy 公开的方法需要表单 urlencoded 格式,而不是 json。
如果设置了traditional: true
,则不得在CherryPy中的alerts
参数后面添加大括号,否则必须添加大括号。
关于javascript - 使用 AJAX 将 JavaScript 数组传递给cherrypy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463617/