You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery发送DELETE请求的参数无法被CherryPy后端接收的问题求助

解决jQuery DELETE/POST请求参数无法被CherryPy后端获取的问题

问题原因

  1. CherryPy默认解析规则:CherryPy默认仅自动解析POST请求(且内容类型为application/x-www-form-urlencoded)的表单数据,对于DELETE请求,默认不会主动解析请求体中的参数。
  2. jQuery方法差异:$.post默认会把data编码为application/x-www-form-urlencoded格式发送,但手动用$.ajax指定type: 'POST'或'DELETE'时,若未显式设置contentType,数据编码方式可能不符合CherryPy的自动解析要求,导致参数无法提取。

解决方案

方案1:将参数放到URL查询字符串(最简单通用)

不管请求方法是DELETE还是POST,直接把参数拼接在URL后,CherryPy的方法参数可直接获取:

$.ajax({
    url: `/rest/order?magentoid=${order_id}`,
    type: 'DELETE',
    success: function(data) {},
    error: function(xhr, status, error) {}
});

方案2:前端显式设置contentType,后端开启解析工具

前端修改:

确保$.ajax发送的请求内容类型为application/x-www-form-urlencoded,让jQuery正确编码数据:

$.ajax({
    url: `/rest/order`,
    type: 'DELETE',
    data: { "magentoid": order_id },
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    processData: true, // 默认开启,确保数据编码为表单格式
    success: function(data) {},
    error: function(xhr, status, error) {}
});

后端修改:

给接口添加cherrypy.tools.request_body()工具,让CherryPy解析DELETE请求的表单数据:

@cherrypy.expose
@cherrypy.tools.json_out()
@cherrypy.tools.request_body()
def order(self, supplier = None, magentoid = None, dropship = None):
    logging.info(f"supplier: {supplier}, magid: {magentoid}")

方案3:后端手动解析请求体

如果需要用JSON格式传参,可手动读取并解析请求体:

前端修改(发送JSON):

$.ajax({
    url: `/rest/order`,
    type: 'DELETE',
    data: JSON.stringify({ "magentoid": order_id }),
    contentType: 'application/json',
    success: function(data) {},
    error: function(xhr, status, error) {}
});

后端修改:

import json

@cherrypy.expose
@cherrypy.tools.json_out()
def order(self):
    # 读取并解析请求体
    body = cherrypy.request.body.read().decode('utf-8')
    params = json.loads(body) if body else {}
    magentoid = params.get('magentoid')
    supplier = params.get('supplier')
    dropship = params.get('dropship')
    logging.info(f"supplier: {supplier}, magid: {magentoid}")

补充说明

你提到用$.ajax改POST也拿不到参数,大概率是未显式设置contentType导致编码方式错误,按方案2的前端配置修改即可解决。

内容的提问来源于stack exchange,提问作者Bart Friederichs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:27:03