账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么现在JSONP也不能进行跨域请求了?
    • ℡一不小心☆喜欢你℡2021-12-23 02:22
    34
    0
    浏览器:chrome 96。问题描述:我在test.html中使用了jsonp请求,发现浏览器报了跨域的错误。了解jsonp的都知道jsonp就是动态创建一个script标签引用服务器返回的js代码,这段代码里面写了一个函数调用。那么就是说我引用外域的JS文件会导致跨域问题,但是很奇怪的是,我的代码里也引用的cdn加速的jquery文件啊,这个Jquery文件和我的html文件也没在一个服务器啊,为什么jquery这个script链接不报跨域错误呢?那么是不是说可以通过配置服务器来解决这个问题呢? 我尝试了取消使用jsonp求请求去获取这个文件,改成直接在html文件写入script标签来引用这个文件,果然还是出现了跨域的问题。 请问如果处理这个问题?可以直接更改我要请求的服务器的配置来解决么?尽量不使用nginx反向代理来解决。 因为我希望这个jsonp请求能像引用jquery的cdn链接一样简单。有同学要我贴代码以及让我在不同浏览器尝试,其实我是有尝试的,我再补充下相关说明补充说明:我在chrome96中是有跨域问题的,但是IE11中是没有问题的。代码:<html><head> <meta http-equiv="Content-Type" content="text/html; " charset="UTF-8"> <script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> function doSubmit() { var username = document.getElementById("username").value.trim(); var password = document.getElementById("password").value.trim(); if (username === "") { window.alert("请输入用户名"); return false; } if (password === "") { window.alert("请输入密码"); return false; } var url = "http://000.000.000.000:8081/webroot/decision/login/cross/domain" + "?fine_username=" +encodeURIComponent(username) + "&fine_password=" + encodeURIComponent(password) + "&validity=" + -1; alert(url); jQuery.ajax({ url: url,//单点登录的管理平台报表服务器 timeout: 5000,//超时时间(单位:毫秒) dataType:"jsonp",//跨域采用jsonp方式 jsonp:"callback", success: function (res) { console.log(res); if (res.errorCode) { window.alert(res.errorMsg); }else { // 保存token并跳转到对应链接 window.location.href = "http://localhost:8080/webroot/decision"; } }, error: function () { alert("超时或服务器其他错误");// 登录失败(超时或服务器其他错误) } }); } function callback (res) { console.log('script',res) } </script></head><body><p>请登录</p><form id="login" name="login" method="POST" action=""> <p>用户名:<input id="username" type="text" name="username"/></p> <p>密 码:<input id="password" type="password" name="password"/></p> <input type="button" value="登录" onClick="doSubmit()"/></form><script src="http://000.000.000.000:8081/webroot/decision/login/cross/domain?fine_username=admin&fine_password=Aa123456&validity=-1"></script></body></html>chrome报错截图
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 锁顁婞福 普通会员 1楼

      JSONP(JSON with Padding)是一种允许客户端在不改变服务器端代码的情况下,通过JavaScript向服务器获取JSON数据的技术。然而,它目前无法在跨域请求中使用,这是因为它依赖于浏览器的同源策略。

      同源策略规定,如果两个源的协议、域名和端口号不同,那么它们之间的数据传输是受限的。JSONP允许两个来源共享同一个服务器端资源,但是这种共享并不意味着它们的协议、域名和端口号必须完全相同。

      如果两个来源的协议、域名和端口号不同,那么它们之间的数据传输就会受限。因此,JSONP无法在跨域请求中使用,因为它依赖于同源策略。

      为了解决这个问题,可以使用CORS(Cross-Origin Resource Sharing)技术。CORS允许服务器在接收到跨域请求时,返回一个Access-Control-Allow-Origin响应头,指示客户端可以使用哪个源来访问服务器的资源。

      这样,即使两个源的协议、域名和端口号不同,客户端也可以通过CORS技术向服务器请求JSON数据。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部