【问题标题】:Pass JavaScript array to cherrypy with AJAX使用 AJAX 将 JavaScript 数组传递给cherrypy
【发布时间】:2014-06-21 05:34:15
【问题描述】:

我正在尝试向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);            
      }
    });
});

});

这是cherrypy部分(我使用这个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 调用传递(至少这是我的猜测)。

有什么想法吗?

【问题讨论】:

    标签: javascript python ajax arrays cherrypy


    【解决方案1】:

    你应该用data: {alerts: alert_ids}而不是data: JSON.stringify({alerts: alert_ids})来调用$.ajax

    另外,删除contentType : "application/json", 行。 CherryPy 公开的方法需要 form-urlencoded 格式,而不是 json。

    如果设置traditional: true,CherryPy中的alerts参数后面一定不能加大括号,否则必须加。

    【讨论】:

    • 没有。我在 python 方面仍然一无所获(获得默认的 [])。
    • 在您的代码中发现另一个问题,请参阅我编辑的答案的最后一部分。
    • 我已经根据您的建议更新了我的代码(以及问题中的代码),但我仍然从cherrypy 部分的 a_ids 中得到 [] ...
    • 现在您还添加了traditional: true。如果你这样做,你不需要在 CherryPy 中写 alerts 之后的大括号,即你在 CherryPy 中只写 a_ids = alerts_ids.pop('alerts', [])。如果没有traditional: true,即使用traditional: false,则需要alerts 之后的大括号。您必须使用一种或另一种修复方法,但不能同时使用两种方法。
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 2015-03-01
    • 2019-12-24
    • 2013-08-23
    • 2011-11-07
    • 1970-01-01
    • 2016-11-05
    • 2016-04-22
    相关资源
    最近更新 更多