songrx_it 2020-01-07 09:20 采纳率: 0%
浏览 597

关于跨域发送post请求

1.接口用Python Flask RestFul开发的接口,初始化App的时候添加了cors的设置
,然后再微信开发者工具(就是小程序开发工具)中调试可以跨域请求回结果来,
问题是:将连接发送到手机端打开就请求不到数据

2.代码如下
后端接口的cors配置如下

app = Flask(__name__)
CORS(app, supports_credentials=True)
api = Api(app)

前端请求如下

        var xmlhttp;
        if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
        } else { 
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var jsonString = xmlhttp.responseText;
        var objc = JSON.parse(jsonString);
        var json_objc1 = objc['Data']
        document.getElementById("showNumber").innerHTML = "号码:" + json_objc1['name_id'] + "<br/>" + "姓名:" +json_objc1['name'];
        document.getElementById("button").innerHTML = "修改简介";
        suessFlag = 1;
        } else {
        alert(xmlhttp.status)
        }
        //就是这里的端口和本身网站的IP是一样的,端口不同,这种跨域
        var url_3 = 'https://域名:端口/getInfo
        xmlhttp.open("POST", url_3, true);
        xmlhttp.setRequestHeader('Access-Control-Allow-Origin', '*')
        xmlhttp.setRequestHeader("access-control-allow-credentials", "true")
        xmlhttp.setRequestHeader("Content-type", "application/json")
        xmlhttp.send(JSON.stringify(temp));

然后把xmlhttp.status的状态码打印出来,发现状态码是0,百度出来0代表还未初始化,初始化失败

所以想问下这是什么原因哪里的参数不对

  • 写回答

1条回答

  • lshen01 2023-03-17 09:37
    关注

    参考GPT和自己的思路:

    根据你提供的代码和情况,我认为可能是由于以下几个原因导致的:

    1. 在前端请求中,设置了请求的头部信息,但是此信息应该在服务端设置,所以可以将第22行和第23行代码移除,并且在服务端添加相应的头部信息:
    CORS(app, supports_credentials=True, origins='*', allow_headers=["Content-Type", "Authorization", "Access-Control-Allow-Credentials"])
    

    这样,服务端返回的响应头中就会带有 Access-Control-Allow-CredentialsAccess-Control-Allow-Origin 这两个信息。

    1. 在前端请求中,第20行代码中的 https://域名:端口/getInfo 需要替换为真实的 URL,如果 URL 不正确,则会导致请求失败。

    2. 在前端请求中,应该将第19行代码挪到前面,先设置好请求方式和 URL,再去设置请求头和发送请求:

    var url_3 = 'https://域名:端口/getInfo';
    xmlhttp.open("POST", url_3, true);
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send(JSON.stringify(temp));
    
    1. 如果仍然存在问题,可以使用 Chrome 浏览器的开发者工具在 Network 标签中查看请求和响应的详细信息,可能会有更加具体的错误提示。
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog