天地惠 2023-09-23 22:31 采纳率: 50%
浏览 31
已结题

ajax跨域问题请求修改代码

我有如下一段代码,在http://portal.admin.do.com/这个网页的控制台输入打开,原来运行正常,但最近不能运行了,出现如下提示,请求帮忙修改代码。
Access to XMLHttpRequest at 'http://bizqa.admin.do.com' from origin 'http://portal.admin.dongao.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

代码如下:

h1="http://bizqa.admin.do.com";
clearInterval(cxTimer);
var cxTimer=setInterval(function(){
$.ajax({
type:"POST",     //ajax请求使用POST方法
url :"http://bizqa.admin.do.com ",  //请求的服务器地址
data:{//发送到服务器的数据,JSON 数据类型
"examId": "1004",
},
dataType:"json",  //指定从服务器返回 JSON 数据类型
success:function(mm){
console.log('请求成功:'); 
//console.log(mm); 
for(let i=0;i<mm.rows.length;i++){ 
if(mm.rows[i].vipType!=8 && mm.rows[i].lockTeacher==null){
hh=h1+ mm.rows[i].id +"/2";

              }
//console.log(mm.rows[i].id);
}
},//请求成功要执行的代码,//参数:从服务器返回的数据
error:function(){console.log('请求失败')}//请求失败要执行的代码
});
}, Math.random()*500)// 时间间隔不能小于800毫秒



  • 写回答

19条回答 默认 最新

  • 专家-赤兔[在线] 2023-09-23 23:07
    关注
    获得0.30元问题酬金

    引用 皆我百晓生 小程序回复内容作答:

    跨域请求问题通常是由于浏览器的同源策略引起的。根据你提供的错误提示,你的请求被阻止了,因为服务器没有返回"Access-Control-Allow-Origin"头部字段。

    要解决这个问题,你需要在服务器端设置相应的响应头部。

    在你的服务器代码中,添加以下响应头部字段:

    Access-Control-Allow-Origin: http://portal.admin.dongao.com
    

    这将允许来自http://portal.admin.dongao.com域的跨域请求访问你的服务器。确保将这行代码添加到你的服务器端代码中,并确保服务器正确地响应这个头部。

    请注意,这个解决方案需要在你的服务器上进行更改,而不是在你的客户端代码中。如果你无法访问服务器代码,或者你没有权限进行更改,你可以联系服务器的管理员或开发者,请求他们将相应的头部添加到服务器响应中。

    • 以下补充作答:

    要解决跨域问题,可以将ajax的请求改为使用JSONP或者代理方式。

    1.使用JSONP
    JSONP是一种利用script标签实现跨域请求的方式。修改代码如下:

    h1 = "http://bizqa.admin.do.com";
    clearInterval(cxTimer);
    var cxTimer = setInterval(function() {
        $.ajax({
            type: "GET",
            url: "http://bizqa.admin.do.com",
            data: {
                "examId": "1004",
            },
            dataType: "jsonp",
            success: function(mm) {
                console.log('请求成功:');
                //console.log(mm); 
                for (let i = 0; i < mm.rows.length; i++) {
                    if (mm.rows[i].vipType != 8 && mm.rows[i].lockTeacher == null) {
                        hh = h1 + mm.rows[i].id + "/2";
                    }
                    //console.log(mm.rows[i].id);
                }
            },
            error: function() {
                console.log('请求失败');
            }
        });
    }, Math.random() * 500);
    

    注意修改了type为GET,并将dataType改为"jsonp",以及修改成功回调函数success中的代码。

    2.使用代理
    通过在服务器端设置代理,解决跨域问题。修改代码如下:

    h1 = "/api/bizqa";
    clearInterval(cxTimer);
    var cxTimer = setInterval(function() {
        $.ajax({
            type: "POST",
            url: "http://portal.admin.do.com/proxy", // 设置代理的接口地址
            data: {
                url: "http://bizqa.admin.do.com",
                method: "POST",
                data: JSON.stringify({
                    "examId": "1004"
                }),
                dataType: "json"
            },
            success: function(mm) {
                console.log('请求成功:');
                //console.log(mm); 
                for (let i = 0; i < mm.rows.length; i++) {
                    if (mm.rows[i].vipType != 8 && mm.rows[i].lockTeacher == null) {
                        hh = h1 + mm.rows[i].id + "/2";
                    }
                    //console.log(mm.rows[i].id);
                }
            },
            error: function() {
                console.log('请求失败');
            }
        });
    }, Math.random() * 500);
    

    在这里通过设置代理的接口地址来转发请求到目标地址,并将请求参数在data中进行传递。

    请根据你的需求选择其中一种方法进行修改。

    评论 编辑记录
  • Hi 小朋友 2023-09-23 23:09
    关注
    获得0.15元问题酬金

    跨域只能在后端解决

    评论
  • 数据大魔王 2023-09-23 23:50
    关注
    获得0.45元问题酬金

    根据您提供的代码和错误信息,出现了CORS略阻止了跨域请求的问题。这是由于浏览器的安全机制所引起的。要解决这个问题,您可以在服务器端添加响应头以允许跨域请求,具体方法如下1. 在服务器端,添加一个名为\Access-Control-Allow-Origin\的响应头,并将其值设置为请求的源地址,即://portal.admin.dongao.com\。这可以通过在服务器代码中设置合适的响应头来实现2. 如果使用的是Node.js服务器,可以使用cors中间件来实现跨域请求。安装cors依赖包并按照以下方式在服务器代码中使用```javascriptconst express = require(\express\const cors = require(\cors\const app = expressapp.use(cors origin: \http://portal.admin.dongao.com/// 其他服务器路由和逻辑app.listen(3000, () => console.log(\Server listening on port 3000``这将设置\Access-Control-Allow-Origin\响应头为://portal.admin.dongao.com\,允许来自该源的请求访问您的服务器请注意,以上方法用于服务器端进行配置。如果您没有服务器端代码的访问权限,或者无法进行服务器端配置,那么您需要联系服务器管理员或者将您的请求发送到一个可以处理跨域请求的服务器上。

    评论
  • iachel 2023-09-24 01:01
    关注
    获得0.15元问题酬金

    你检查域名是不是错了,提示都写了,不要从dongao请求do的页面。
    应该打开do域名的页面,再打开控制台就不会提示跨域了

    评论 编辑记录
  • 天地惠 2023-09-24 07:33
    关注

    谢谢各位。我是菜鸟,只能依据老师的代码进行测试,没有自己完善代码的能力。
    对于前面老师的回复回应如下:
    1、我没有服务器端代码的访问权限,或者无法进行服务器端配置
    2、要用POST
    3、测试了第一位老师的使用代理的代码,提示
    http://portal.admin.do.com/proxy 404,请求失败。
    另外,老师修改了h1的代码,我估计下面的代码中hh字符串的内容似乎少了admin.do.com
    hh = h1 + mm.rows[i].id + "/2";

    评论
  • giser@2011 2023-09-24 08:12
    关注
    获得0.15元问题酬金

    后端可以使用cors解决跨域

    评论
  • 杨得江-君临天下wyj 2023-09-24 08:17
    关注
    获得0.30元问题酬金
    
    h1 = "http://bizqa.admin.do.com";
    clearInterval(cxTimer);
    var cxTimer = setInterval(function() {
        $.ajax({
            type: "GET",
            url: "http://bizqa.admin.do.com",
            data: {
                "examId": "1004",
            },
            dataType: "jsonp",
            success: function(mm) {
                console.log('请求成功:');
                //console.log(mm); 
                for (let i = 0; i < mm.rows.length; i++) {
                    if (mm.rows[i].vipType != 8 && mm.rows[i].lockTeacher == null) {
                        hh = h1 + mm.rows[i].id + "/2";
                    }
                    //console.log(mm.rows[i].id);
                }
            },
            error: function() {
                console.log('请求失败');
            }
        });
    }, Math.random() * 500);
    
    
    评论
  • 急速光粒 2023-09-24 08:44
    关注
    获得0.30元问题酬金

    如果现在跨域了,而且没法修改服务器,那就可能需要做反向代理实现。

    评论
  • 朱友斌 2023-09-24 08:53
    关注
    获得0.60元问题酬金

    跨域一般是后端修改,前端解决跨域太复杂了。

    评论
  • 小明说Java 2023-09-24 13:52
    关注
    获得0.15元问题酬金

    后台代码开启跨域设置了吗

    评论
  • Jackyin0720 2023-09-24 14:21
    关注
    获得0.30元问题酬金

    参考结合GPT4.0、文心一言,如有帮助,恭请采纳。

    Access to XMLHttpRequest at 'http://bizqa.admin.do.com' from origin 'http://portal.admin.dongao.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    CORS 策略已阻止从来源 "http://portal.admin.dongao.com/ "访问 "http://bizqa.admin.do.com "的 XMLHttpRequest: 请求的资源上没有 "Access-Control-Allow-Origin "标头。
    根据中文释义分析,这是因为浏览器为了安全起见,不允许从一个源加载的网页请求另一个源的资源。在这个问题中,你的代码尝试从一个源(http://portal.admin.dongao.com)发送请求到另一个源(http://bizqa.admin.do.com),但服务器没有返回正确的CORS头部,导致请求被浏览器阻止。

    大致思路:
    1、在服务器端(http://bizqa.admin.do.com)设置CORS头部,允许来自http://portal.admin.dongao.com的请求。具体的设置方法取决于服务器端使用的技术和框架。
    对于大多数服务器框架,你可以通过添加以下代码样例来设置CORS头部:
    Access-Control-Allow-Origin: http://portal.admin.dongao.com/
    2、其次,如果你无法直接修改服务器端的配置,可以考虑在客户端和服务器之间设置一个代理服务器。代理服务器可以接收到客户端的请求,然后在服务器端发送请求,并将响应返回给客户端,同时处理CORS相关的头部。
    3、还有就是如果你对服务器有控制权,可以考虑使用JSONP来处理跨源请求。

    评论
  • coder_small_bell 2023-09-24 21:30
    关注
    获得0.15元问题酬金

    一般让后端改跨域问题吧,前面不用

    评论
  • bug菌¹ Java领域优质创作者 2023-09-24 22:04
    关注
    获得0.60元问题酬金

    该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


    修改代码如下:

    h1="http://bizqa.admin.do.com";
    clearInterval(cxTimer);
    var cxTimer=setInterval(function(){
    $.ajax({
    type:"POST",     //ajax请求使用POST方法
    url :"http://bizqa.admin.do.com ",  //请求的服务器地址
    data:{//发送到服务器的数据,JSON 数据类型
    "examId": "1004",
    },
    dataType:"json",  //指定从服务器返回 JSON 数据类型
    crossDomain: true, //允许跨域请求
    xhrFields: {
        withCredentials: true //允许携带cookie
    },
    success:function(mm){
    console.log('请求成功:'); 
    //console.log(mm); 
    for(let i=0;i<mm.rows.length;i++){ 
    if(mm.rows[i].vipType!=8 && mm.rows[i].lockTeacher==null){
    hh=h1+ mm.rows[i].id +"/2";
     
                  }
    //console.log(mm.rows[i].id);
    }
    },//请求成功要执行的代码,//参数:从服务器返回的数据
    error:function(){console.log('请求失败')}//请求失败要执行的代码
    });
    }, Math.random()*500)// 时间间隔不能小于800毫秒
    

    在原有代码的基础上,新增了crossDomain和xhrFields两个属性。crossDomain允许跨域请求,xhrFields允许携带cookie。这两个属性可以解决跨域问题。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-25 01:39
    关注
    获得0.60元问题酬金

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • 心梓知识 2023-09-26 01:35
    关注
    获得0.30元问题酬金

    结合GPT给出回答如下请题主参考
    首先,由于跨域问题,我们需要在服务器端设置Access-Control-Allow-Origin来允许跨域请求。如果我们没有服务器端代码控制权,可以使用JSONP等其他方式来绕过跨域限制。下面是使用JSONP的示例代码:

    function handleResponse(data) {
      console.log(data);
    }
    
    var script = document.createElement('script');
    script.src = 'http://other.do.com/api/user?callback=handleResponse';
    document.body.appendChild(script);
    

    上面的代码会向http://other.do.com/api/user发送JSONP请求,然后将返回的响应数据通过一个名为handleResponse的回调函数进行处理。注意,我们需要在请求URL中添加一个callback参数,以指定回调函数的名称。然后在服务器端将返回的数据包装为函数调用,并将函数名称作为参数返回。这样浏览器就可以正确地处理返回的数据了。

    评论
  • yy64ll826 2023-09-26 16:49
    关注
    获得0.15元问题酬金
    评论
  • IT技术分享社区 数据库领域优质创作者 2023-09-26 16:55
    关注
    获得0.60元问题酬金
    评论
  • Leodong. 2023-09-27 11:38
    关注
    获得0.30元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    跨域问题是由于浏览器的同源策略导致的。服务器需要在响应头中添加Access-Control-Allow-Origin字段,以允许跨域请求。由于我不能直接修改服务器代码,你可以在你的服务器端添加以下代码来解决这个问题:
    如果你使用的是Node.js的Express框架,可以这样设置:

    const express = require('express');
    const app = express();
    
    app.use((req, res, next) => {
      res.header('Access-Control-Allow-Origin', '*'); // 允许所有域名访问,你也可以指定特定的域名
      res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
      res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
      next();
    });
    
    // 其他路由和中间件
    

    如果你使用的是PHP,可以在你的PHP文件中添加以下代码:

    <?php
    header('Access-Control-Allow-Origin: *'); // 允许所有域名访问,你也可以指定特定的域名
    header('Access-Control-Allow-Headers: Content-Type, Authorization');
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
    ?>
    

    如果你使用的是其他后端语言,请查阅相关文档以了解如何设置响应头。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论
  • 关注
    获得0.30元问题酬金

    后端代码有没有具体的,在街口上设置允许就行了

    评论

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 赞助了问题酬金15元 9月23日
  • 创建了问题 9月23日

悬赏问题

  • ¥20 有人能代写linux应用吗?有偿,酬金可商量,具体要求联系我
  • ¥15 神经网络建立应力预测模型
  • ¥20 反编译一款APP手游,解密出lua脚本。
  • ¥15 改一下,代码,让代码符合要求
  • ¥15 报错问题,只有两个错误,如图片所示,i多次初始化
  • ¥15 matlab runtime 如何收费
  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 生信simpleaffy包下载
  • ¥15 在二层网络中,掩码存在包含关系即可通信