手机端测试html js代码可以运行 但是一旦发送axios请求 无法正常使用
时间: 2023-12-07 12:05:04 浏览: 141
这可能是由于你的axios请求受到了浏览器的跨域限制。浏览器通常会阻止跨域请求,以确保安全性。你可以通过以下方法解决这个问题:
1. 在后端设置允许跨域请求的响应头
在你的后端代码中,可以在响应头中添加以下内容,以允许跨域请求:
```
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
```
其中 `Access-Control-Allow-Origin: *` 表示允许任何来源的请求,你也可以设置为具体的域名。
2. 使用代理
你也可以使用代理来发送请求,将前端发送的请求发送到同域的后端,再由后端发送请求到目标服务器。这样就可以避免跨域请求的限制。
3. 使用JSONP
如果你只需要发送 GET 请求,你可以使用 JSONP 来解决跨域问题。JSONP 是一种利用 script 标签可以跨域访问的特性来实现的跨域请求方式。
希望以上方法中的其中一种可以帮助你解决问题。
相关问题
uniapp 若依手机端框架 发送后端请求 多久没有回复 就报错 在哪设置
在UniApp若依(VitePress)框架中,处理后端请求超时并自动抛出错误通常是在组件的生命周期钩子或HTTP客户端库(如axios)的配置里设置。如果你使用的是axios进行API请求,可以在发送请求时添加一个timeout选项来指定超时时间。
例如,在axios的实例化配置或每个请求的options中设置:
```javascript
import axios from 'uni-app-router/axios';
axios.defaults.timeout = 5000; // 设置默认超时时间为5秒
// 或者针对特定请求单独设置
axios.get('/api/data', {
timeout: 3000, // 对这个GET请求设置3秒超时
})
.then(response => ...)
.catch(error => {
if (error.response && error.response.status === 408) { // 如果是408(请求超时)错误
console.error('后端请求超时');
}
});
```
在这个例子中,如果后端在5秒内(默认)或3秒内(对于`get('/api/data')`)没有响应,就会触发相应的错误处理逻辑。
这是一个前后端分离的项目 前端用的是Vue框架 后端用的是java 现在的场景是有A和B两端 A端向B端发送请求的时候 会在请求的末尾添加上密钥和当前的时间戳 并且该请求是一个post请求需要请求体 请求体里有具体的信息 比如手机号商户号 A端需要根据密钥和请求体里的信息在前端根据特定的规则生成一个签名发送到B端 B端在接收到请求的时候会使用filter 需要根据相同的规则验证签名是否一致 否则过滤掉该请求 请将上述场景 利用代码实现
以下是示例代码,其中签名的生成规则为将请求体和时间戳按照一定顺序拼接后进行哈希计算,密钥为示例中的字符串"secret_key":
前端代码:
```javascript
import axios from 'axios';
import md5 from 'js-md5';
const baseUrl = 'http://backend_api_url';
// 生成签名
function generateSignature(data, timestamp) {
const sortedData = Object.keys(data).sort().map(key => `${key}=${data[key]}`).join('&');
const stringToSign = `${sortedData}×tamp=${timestamp}`;
const signature = md5(stringToSign + 'secret_key');
return signature;
}
// 发送请求
function sendRequest(data) {
const timestamp = Math.floor(Date.now() / 1000);
const signature = generateSignature(data, timestamp);
const postData = Object.assign({}, data, { timestamp, signature });
return axios.post(baseUrl, postData);
}
// 调用示例
sendRequest({
phone: '1234567890',
merchant_id: 'abcd1234'
}).then(response => {
console.log(response);
}).catch(error => {
console.error(error);
});
```
后端代码:
```java
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter(filterName = "signatureFilter", urlPatterns = "/*")
public class SignatureFilter implements Filter {
private static final String SECRET_KEY = "secret_key";
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String method = httpRequest.getMethod();
if (!method.equals("POST")) {
chain.doFilter(request, response);
return;
}
Map<String, String[]> parameterMap = new TreeMap<>(httpRequest.getParameterMap());
String timestamp = httpRequest.getParameter("timestamp");
String signature = httpRequest.getParameter("signature");
String sortedParams = parameterMap.keySet().stream()
.sorted()
.map(key -> key + "=" + parameterMap.get(key)[0])
.reduce((a, b) -> a + "&" + b)
.orElse("");
String stringToSign = sortedParams + "×tamp=" + timestamp;
String expectedSignature = md5(stringToSign + SECRET_KEY);
if (signature.equals(expectedSignature)) {
chain.doFilter(request, response);
} else {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);
}
}
@Override
public void destroy() {}
private static String md5(String s) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(s.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
```
阅读全文