![](/img/trans.png)
[英]How can I disable browser go to previous page when making HTML form.submit()?
[英]How can I stop a form.submit() from redirecting me to another page?
我正在构建一个Web应用程序,并且我需要对我个人没有访问权限的服务器发出某种形式的跨域POST请求。
我已经尝试了很多方法来使其与Ajax一起使用,但没有成功。 我做了一些研究,最终找到了一个解决方案,该方案是使用表单创建一个不可见的iframe,然后提交所述表单以获取我需要的信息。
但是,此表单是用javascript创建的,因此我使用form.submit()方法提交了所述表单,这不仅是将所需信息提供给我JSON文件,而且还将我重定向到了其中的实际JSON文件。完全不同的页面。
如何防止这种情况发生?
var ifr = document.createElement('iframe');
var frm = document.createElement('form');
frm.setAttribute("id", "invis_form");
frm.setAttribute("action", endpoint);
frm.setAttribute("method", "post");
var x = document.createElement("INPUT");
x.setAttribute("type", "text");
x.setAttribute("name", "chave");
x.setAttribute("value", apikey);
var y = document.createElement("INPUT");
y.setAttribute("type", "text");
y.setAttribute("name", "valor");
y.setAttribute("value", "125");
frm.appendChild(x);
frm.appendChild(y);
ifr.appendChild(frm);
document.body.appendChild(ifr);
frm.submit();
我期望获得可以在控制台上打印的内容,而不是将其重定向到具有所需信息的JSON文件。
提交表单的行为触发浏览器导航到HTTP请求返回的响应。
停止其替换当前页面的唯一方法是使导航发生在具有target
…的其他位置(例如,在框架或新窗口中),但是跨域安全性将阻止您使用JavaScript读取数据。
出于与无法使用Ajax进行操作的相同原因, 您不能使用表单从远程站点读取数据。
浏览器旨在阻止您的JavaScript读取他人网站愿意与浏览器所有者共享的数据 。
如果数据是公开的(即不需要用户登录,不在同一LAN上或类似的东西),则使用服务器端技术读取数据(您可以将其代理到浏览器)。
弄清楚了您可以将https://cors-anywhere.herokuapp.com/添加到您的端点,它即使在Ajax请求中也可以正常工作。
例
var apikey = "my-api-key";
var cors = "https://cors-anywhere.herokuapp.com/";
var endpoint = "https://test/example";
$.ajax({
type: "POST",
url: cors + endpoint + "/create",
crossDomain: true,
dataType: 'json',
data: {
'chave': apikey,
'valor': 125.00
},
success: function (data) {
console.log(data);
},
error: function (error) {
console.log(error);
},
});
这如何或为什么起作用? 我没有任何线索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.