javascript - 使用 jQuery 提交表单(json 编码、ajax、解析原始 url/方法)

标签 javascript jquery json ajax forms

我发现了很多关于在没有 json 的情况下提交表单以及在 javascript 代码中静态指定 url 和方法提交表单的问题。

但我真正想要的是一种方法,让我的所有表单以表单最初指定的方式发送 ajax 请求,唯一的区别是我希望数据进行 json 编码。

例如这样的表单

<form role="form" action="api/login" method="POST">
  <input name="email" value="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="583521183d35393134763b3735" rel="noreferrer noopener nofollow">[email protected]</a>" type="text"/>
  <input name="password" value="mypassword" type="text"/>
  <button type="submit">Login</button>
</form>

提交时应该自动生成一个像这样的ajax请求:

POST /api/login HTTP/1.1
Content-type: application/json

{
    "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e4899da48189858d88ca878b89" rel="noreferrer noopener nofollow">[email protected]</a>",
    "password": "mypassword"
}

无需我再次在 javascript 代码中指定方法或 url。

而且我不想为我编写的每个表单编写新代码。我只是希望有一个片段可以自动将上述内容应用到任何表单。

最佳答案

你尝试这样的事情

$(document).on('submit','form',function(e){
    e.preventDefault();
    $form = $(this);

    $.ajax({
        type: $form.attr('method'),
        url: $form.attr('action'),
        data: getObject($form.serializeArray()),
        success: function (response) {
            //Success Handler
        }
    });
    return false;
});

function getObject(data) {
    var paramObj = {};
    $.each(data, function(_, kv) {
        if (paramObj.hasOwnProperty(kv.name)) {
            paramObj[kv.name] = $.makeArray(paramObj[kv.name]);
            paramObj[kv.name].push(kv.value);
        }
        else {
            paramObj[kv.name] = kv.value;
        }
     });
     return paramObj;
}

关于javascript - 使用 jQuery 提交表单(json 编码、ajax、解析原始 url/方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533365/

相关文章:

javascript - 如何检查对象是否在 JavaScript 中有任何属性?

javascript - 位于内容下方的滑动面板?

javascript - 用数字在表格中用逗号替换点

ios - 我需要在 ios 的键中不带双引号的 json 字符串

java - 从 android 应用程序的 firebase 读取数据

javascript - 如何拆分添加子属性名称的 JSON 属性值?

javascript - 移动格式处理在 HTML/CSS/JavaScript 中的什么位置?

java - 如何从 Android 向 .NET 服务器发出 HTTPS Post 请求?

javascript - OData服务数据绑定(bind)

javascript - 具有多行的 jQuery 光滑 slider 不起作用