【发布时间】:2020-07-21 01:10:22
【问题描述】:
我正在通过手动构建 XMLHttpRequest 来学习如何通过 JavaScript 发送表单。 在给定示例的末尾,有一条注释:
注意:如果您想向第三方网站发送数据,则 XMLHttpRequest 的这种使用受同源策略的约束。对于跨域请求,您需要 CORS 和 HTTP 访问控制。
不过,我想在本地测试该示例。我可以更改什么以使其在本地工作?投稿地址?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>Click me!</button>
<script>
function sendData(data) {
console.log('Sending data');
const XHR = new XMLHttpRequest();
let urlEncodedData = "",
urlEncodedDataPairs = [],
name;
for (name in data) {
urlEncodedDataPairs.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
}
urlEncodedData = urlEncodedDataPairs.join('&').replace('/%20/g', '+');
XHR.addEventListener('load', function (event) {
alert('Yeah! Data sent and response loaded.');
});
XHR.addEventListener('error', function (event) {
alert('Oops! Something went wrong.');
});
XHR.open('POST', 'https://example.com/cors.php');
XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XHR.send(urlEncodedData);
}
const btn = document.querySelector('button');
btn.addEventListener('click', function () {
sendData({ test: 'ok' });
})
</script>
</body>
</html>
【问题讨论】:
-
"我可以改变什么让它在本地工作?发帖请求的地址?" — 是的……你必须这样做,因为示例行不通!
-
那我应该使用哪个地址?
-
您为处理数据而编写的服务器端代码的地址。
-
这只是我正在学习的例子,所以我没有这样的真实代码
-
@bb8 您可以愉快地使用
XMLHttpRequest,而无需在本地运行后端服务器。我假设您正在学习 Web 开发并且对这些东西不是很满意。您只需将 URL 更改为免费的、公开可用的 API,您的网络请求就可以正常工作——当然,在一定程度上。
标签: javascript html forms xmlhttprequest