javascript - 使用 AJAX 将 JavaScript 数组传递给cherrypy

标签 javascript python ajax arrays cherrypy

我试图将一个数组发送到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/

相关文章:

python - 指定对字符串列表进行排序的键

Javascript上传到自己

javascript - 使用 JavaScript 下载 PDF 文件

php - 更改文本输入值

javascript - AngularJS $http get 请求未正确编码对象内的日期

javascript - 通过单击一个按钮调用两个 javascript 函数会得到与两个按钮不同的结果

JavaScript 文件未加载

python - 将整数解析为字符串的意外行为

python - SQLAlchemy:更新 from_select

javascript - 如何将事件绑定(bind)到从 AJAX 请求注入(inject)的 HTML