使用jsonp无法获取text格式数据
时间: 2023-12-07 09:05:48 浏览: 77
json和jsonp数据格式返回
4星 · 用户满意度95%
是的,JSONP一般用于跨域获取JSON格式的数据,无法直接用于获取text格式的数据。如果需要获取text格式的数据,可以使用代理页面的方式实现跨域访问。
代理页面的方式是指在同一域名下创建一个代理页面,用于在客户端和服务器端之间传递数据。客户端将数据发送到代理页面,代理页面再将数据转发给服务器端,服务器处理数据后再将结果发送回代理页面,代理页面再将结果传递给客户端。
具体实现方式如下:
1. 创建代理页面proxy.html:
```html
<!-- proxy.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>代理页面</title>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
<script>
function proxy() {
var data = window.location.search.substring(1);
axios.post('http://example.com/proxy', data, {
headers: {
'Content-Type': 'text/plain;charset=UTF-8'
}
}).then(function(response) {
window.parent.postMessage(response.data, '*');
}).catch(function(error) {
console.log(error);
});
}
window.onload = proxy;
</script>
</head>
<body>
</body>
</html>
```
2. 在父页面中,将需要获取的text格式数据以字符串形式作为参数,发送到代理页面:
```js
// 父页面
var text = '这是需要获取的文本';
var proxyUrl = 'http://example.com/proxy.html';
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = proxyUrl + '?' + text;
document.body.appendChild(iframe);
window.addEventListener('message', function(event) {
console.log(event.data);
});
```
3. 在服务器端,接收代理页面发送的数据,并返回处理结果:
```js
// 服务器端
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.text());
app.post('/proxy', (req, res) => {
const text = req.body;
// 处理text格式的数据
const result = text.toUpperCase();
res.send(result);
});
app.listen(80, () => {
console.log('服务器已启动');
});
```
需要注意的是,代理页面需要在服务器端进行处理,并且需要考虑数据安全性的问题。
阅读全文