通过 javascript 向 REST API 发送 POST 请求

新手上路,请多包涵

首先,我在某处读到我们不应该使用 XMLHttpRequest

其次,我是 Javascript 的新手。

第三,我创建了一个网页来提交电子邮件和密码。

 <form method="POST" onsubmit="return check();">{% csrf_token %}
    <p><b>Login</b></p>
    <input type="email" name="email" placeholder="Email" required></input>
    <input type="password" name="password" placeholder="Password" id='new_password' ></input>
    <span id='message'>{{msg}}</span>
    <button type="submit" onclick="check()" name="Submit"><b>Submit</b></button>
</form>

我的检查功能是

function check() {
    document.getElementById('message').innerHTML = "checking";
    const url = "https://<hostname/login";
    const data = {
        'email' : document.getElementById('email').value,
        'password' : document.getElementById('password').value
    };

    const other_params = {
        headers : { "content-type" : "application/json; charset=UTF-8" },
        body : data,
        method : "POST",
        mode : "cors"
    };

    fetch(url, other_params)
        .then(function(response) {
            if (response.ok) {
                return response.json();
            } else {
                throw new Error("Could not reach the API: " + response.statusText);
            }
        }).then(function(data) {
            document.getElementById("message").innerHTML = data.encoded;
        }).catch(function(error) {
            document.getElementById("message").innerHTML = error.message;
        });
    return true;
}

此代码不起作用,只是一次又一次地将我重定向到同一页面。

请帮助我了解我做错了什么。

原文由 Pratibha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 264
1 个回答

您的代码的问题是您没有“拦截”表单的提交事件,因此它将执行默认行为 POST 自身(因为它没有指令告诉它在哪里去)。除非您有机会停止此默认行为,否则表单将执行此操作。

要拦截表单的提交事件,您必须告诉浏览器留意此事件并执行自定义函数,而不是使用如下所示的事件侦听器:

 <script>

document.getElementById('whatever-form-id')
  .addEventListener('submit', check);

function check(e) {
  e.preventDefault();
  // and now anything else you want to do.
}

</script>

这将阻止您的表单发布,而是执行您的功能。

原文由 jcmarin2298 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题