【问题标题】:Browser sends GET instead of POST浏览器发送 GET 而不是 POST
【发布时间】:2015-11-24 12:58:54
【问题描述】:

我有一个 javascript 函数以普通 html 表单的方式发送帖子请求。下面是函数实现:

function sendDirectPost(uri, data) {
    var $form = $('<form action="' + withContext(uri) + '" method="POST"></form>');
    appendDataToForm($form, data);
    $form.submit();
}

function appendDataToForm($form, data) {
    var body = $('body');
    _.each(data, function (value, key) {
        $form.append($('<input type="hidden">')
            .attr('name', key)
            .attr('value', value));
    });
    $form.css('display', 'none');
    $form.appendTo(body);
    return $form;
}

目的是用javascript模拟纯表单post提交,所以我不必显式地用javascript应用重定向。

在大多数浏览器中,此功能符合我的预期。但是在某些情况下它不会。出于某种原因,它发送 GET 请求。我还没有设法重现它,但是日志服务从用户代理显示浏览器是 Safari 8.0 或 Android Web Kit 浏览器。也许还有一些其他的,但我没有检查所有。

以下是问题: 1. 这种方法可能有什么问题? 2. 还有其他方法可以用javascript实现标准的表单提交行为吗?也许使用 $.ajax() 函数?

【问题讨论】:

    标签: javascript android jquery ajax http


    【解决方案1】:

    是的,使用$.ajax() 甚至$.post() 会更好更安全。如果你想用 js 发布数据,没有理由用 HTML 表单来做。

    【讨论】:

    • $.ajax() 或 $.post() 的问题是我总是要处理响应并直接添加重定向逻辑。当我使用表单提交时,我不必在客户端添加重定向。
    • 使用 js 进行重定向的一行代码比使用 HTML 的开销要少
    猜你喜欢
    • 2017-12-06
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多