首页 > 解决方案 > POST 请求后触发刷新(AJAX 或 XMLHttpRequest)

问题描述

我试图从 HTML 表单中获得与提交完全相同的行为method="POST",但不使用表单,这似乎是不可能的,但我不明白为什么(如果是因为安全问题或其他原因)。

确切的情况如下:我想通过 POST 发送一个 JSON,最后用这个请求的答案触发刷新,但是

  1. html 表单不接受 JSON 作为字段的编码(我发现了一些规范草案,其中说enctype=application/json最终将支持在表单中使用,但似乎已经死了)
  2. XMLHttpRequest 和 Ajax 都通过 POST 成功发送数据,但它们都不会在异步后台调用结束时触发刷新响应内容。我可以在我的页面中的某个 div 中绘制内容,但是当我的 POST 请求被发送到另一个域时,这会在我的站点中显示另一个网站的内容,这是非常不受欢迎的效果。

或多或少,我对 XMLHttpRequest 的尝试如下:

let my_values = {
    field1: 10
}
let my_request = new XMLHttpRequest();
// POST to another domain
my_request.open("POST", "http://another.domain.com/");
function refresh(){
    // Here I would like to somehow trigger a refresh with
    // my_request.responseText's content, and the browser having
    // another.domain.com as URL, so, a redirect more or less.
}
my_request.onload = refresh;
my_request.send(JSON.stringify(my_values));

我最接近的是这个网站中描述的内容,做了一个这样的把戏:

<form method='POST' enctype='text/plain'>
  <input name='{"field1": 10, "trash": "' value='"}'>
</form>

但这有点像我将自己暴露在某种类似 SQL 注入的攻击中,即使不是这种情况,我也不希望将 json 与一些不必要的字段混淆,只是为了能够从表单。

为什么我不能将 XMLHttpRequest 的执行视为单击href?它会暴露一些漏洞吗?提前非常感谢,如果问题重复/毫无意义,我们深表歉意。

标签: javascripthtmlajax

解决方案


推荐阅读