js 跨域问题
如何在本地用html文件提交一个携带json格式数据的post网络请求?
<script>
function sendData() {
const data = { username: "John", age: 30 }; // 定义要提交的数据
fetch("http://example.com/user/post", { // 请求的 URL
method: "POST", // 请求方法
headers: {
"Content-Type": "application/json" // 请求头
},
body: JSON.stringify(data) // 将数据转为 JSON 格式
})
.then(res => res.json()) // 获取响应并解析为 JSON
.then(data => {
console.log(data); // 处理提交成功后的响应
})
.catch(err => console.log(err)) // 处理错误
}
</script>
<button onclick="sendData()">Submit</button> // 点击按钮调用 sendData() 方法
func Login(c *gin.Context) {
json := make(map[string]interface{}) //注意该结构接受的内容
c.BindJSON(&json)
log.Printf("%v",&json)
c.JSON(http.StatusOK, gin.H{
"name": json["name"],
"password": json["password"],
})
}
对于跨域问题的解决,我认为有以下几个要求:
安全性:跨域解决方案需要保证数据传输的安全性,防止数据被窃取或者篡改。
通用性:跨域解决方案需要支持多种应用场景,比如跨域Ajax请求、跨域Post请求等。
高效性:跨域解决方案需要保证数据传输的速度和效率,避免影响用户体验。
常用的跨域解决方案有以下几种:
function loadScript(src, callback) {
const script = document.createElement('script');
script.src = src;
script.onload = () => {
callback();
}
document.head.appendChild(script);
}
loadScript('http://www.example.com/api/login?username=admin&password=123456', function(data) {
console.log(data);
});
// server.js
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
});
// client.js
fetch('http://www.example.com/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'admin',
password: '123456'
})
}).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
# nginx.conf
server {
listen 80;
server_name www.example.com;
location /api/ {
proxy_pass http://127.0.0.1:8080/;
add_header 'Access-Control-Allow-Origin' '*';
}
}
fetch('http://www.example.com/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: 'admin',
password: '123456'
})
}).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
以上是我对跨域问题的解决方案和要求的回答,希望能对您有所帮助。