在jQuery.post中,出现消息:请求的URL不允许使用GET方法

4 投票
1 回答
721 浏览
提问于 2025-04-17 20:05

我遇到了一个问题:

我在做一个Flask应用程序,想通过AJAX把一些数据传给服务器。因为我对AJAX还不太熟悉,所以有些地方搞不清楚。

在客户端,当用户点击一个图标时,我想通过 jQuery.post 把存储在变量 message: 中的数据传过去:

jQuery("#icon_ID").click(function() {
    var message = {
        'GRAPH_TYPE': graphType
    };
    var _sendOnSuccess = function () {
    }

    var jqxhr = jQuery.post('/graph', message, _sendOnSuccess, 'json');
});

在我的服务器端,我有以下代码:

@app.route('/graph', methods = ['POST'])
@login_required
def physical_graph():
    ret_data = request.form['GRAPH_TYPE']
    return ""

我现在只想在服务器端访问GRAPH_TYPE。不过,当我点击图标时,出现了一个错误信息:

方法不被允许

请求的URL不允许使用GET方法。

我真的不明白为什么Python告诉我我在使用GET方法,而实际上我是在使用POST方法。

有没有人能帮我解决这个问题?我该怎么做才能解决这个问题?如果有其他方法可以用,也请随便给我建议。请记住,除了jQuery,我不想使用其他JavaScript库。

提前谢谢大家!

1 个回答

1

这是因为你把一个 对象 作为 数据 传递,像这样:

var message = {
    'GRAPH_TYPE': graphType
};

在这种情况下,jQuery 会尝试对这个对象进行 URL 编码,并且默认发送的数据类型是 application/x-www-form-urlencoded; charset=UTF-8,同时发送一个 GET 请求。要解决这个问题,确保你传给 jQuery 的数据参数是一个字符串。你可以使用 JSON.stringify 来做到这一点,像这样:

var message = JSON.stringify({ "GRAPH_TYPE": graphType });

撰写回答