Ⅰ ajax跨域不稳定
跨域问题可以解决的
1、响应头添加Header允许访问
2、jsonp 只支持get请求不支持post请求
3、httpClient内部转发
4、使用接口网关——nginx、springcloud zuul (互联网公司常规解决方案)
望采纳
Ⅱ 如何解决ajax跨域请求失败的问题
ajax跨域失败,是因为js遵循同源规则,即不同域名下的js访问是不被允许的(安全考虑),那么如何解决,主要有三个方法,第一个是修改服务器(如果是别人的服务器,就没办法了,所以这个不多说,网上会有具体的操作),说一下客户端就能解决的2个办法,第一个,ajax返回数据,也就是dataType类型设置为jsonp,jsonp是专门为解决跨域问题而生的,具体用法自行网络,第二个方法,我最近也在用的,亲测有效,就是先用自己服务器后台执行curl,抓取目标服务器上的文件,在用前端ajax获取服务器后台获取到的目标服务器文件结果即可
Ⅲ AJAX跨域访问解决方法
IE9、Chrome、FF、Opera支持ResponseHeader Access-Control-Allow-Origin
IE下得额外配置:
jQuery.support.cors = true; (启用读取上面那个头信息的功能)
点击IE浏览器的的“工具->Internet 选项->安全->自定义级别”将“其他”选项中的“通过域访问数据源”选中为“启用”或者“提示”,点击确定就可以了。(自身的过滤)
Ⅳ 如何解决ajax跨域问题
ajax本身是不可以跨域的,
通过产生一个script标签来实现跨域。因为script标签的src属性是没有跨域的限制的。
其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
如
/*当前网址是localhost:3000*/
js代码
$.ajax({
type:"get",
url:"http://localhost:3000/showAll",/*url写异域的请求地址*/
dataType:"jsonp",/*加上datatype*/
jsonpCallback:"cb",/*设置一个回调函数,名字随便取,和下面的函数里的名字相同就行*/
success:function(){
。。。
}
});
/*而在异域服务器上,*/
app.js
app.get('/showAll',students.showAll);/*这和不跨域的写法相同*/
/*在异域服务器的showAll函数里,*/
vardb=require("./database");
exports.showAll=function(req,res){
/**设置响应头允许ajax跨域访问**/
res.setHeader("Access-Control-Allow-Origin","*");
/*星号表示所有的异域请求都可以接受,*/
res.setHeader("Access-Control-Allow-Methods","GET,POST");
varcon=db.getCon();
con.query("select*fromt_students",function(error,rows){
if(error){
console.log("数据库出错:"+error);
}else{
/*注意这里,返回的就是jsonP的回调函数名+数据了*/
res.send("cb("+JSON.stringify(r)+")");
}
});
}
Ⅳ ajax post跨域,是不是没有好的解决方案
如果支持HTML5的XMLHttpRequest 的话,POST还是很好跨域的。
直接在后端,HTTP头里面加上
Access-Control-Allow-Origin: 允许跨域请求资源的网址;
即可。
IE9以下是不支持的, 在IE9以下浏览器的POST跨域很多都是靠 dom一个iframe网页模拟表单提交来做的。
Ⅵ 如何解决ajax跨域问题,域问题
解决跨域的种类
Ⅶ 本来正常的ajax调用出现了跨域问题
做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中, 我们希望使用Ajax来获得B网站中的特定内容, 如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。 Ajax的跨域访问问题是现有的Ajax开发人员比较常遇到的问 题。 IE对于跨域访问的处理是,弹出警告框,提醒用户。 如果用户将该网站纳入可信任网站,或者调低安全级别, 那么这个问题IE就不会在提醒你。 FireFox等其它非微软的浏览器遇到跨域访问, 则解决方案统一是拒绝访问。 有人说,IE是主流浏览器,只要它能正常使用就好了。此言差已, IE虽然能够处理,但是是有前提的, 要么用户不厌其烦地在页面弹出警告框之后点击是( 点击否就不执行该Ajax调用了), 要么用户将该网站纳入可信任站点。这两种做法, 在企业管理系统的应用中倒是比较常见, 因为系统管理员可以以行政手段保证用户的行为。 但是对于互联网上的网站或者门户开发,这种做法则不行。 最近遇到了这个问题, 需要在跨域访问结束之后完成使主窗口出现一些特效, 搜索了一些资料, 通过不断尝试以及在不同浏览器中进行兼容性测试, 找到了几个可行的方案: 1、Web代理的方式。 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网 站的指定页面,由该页面代替用户页面完成交互, 从而返回合适的结果。 此方案可以解决现阶段所能够想到的多数跨域访问问题, 但要求A网站提供Web代理的支持, 因此A网站与B网站之间必须是紧密协作的,且每次交互过程, A网站的服务器负担增加,且无法代用户保存session状态。 2、on-Demand方式。MYMSN的门户就用的这种方式, 不过MYMSN中不涉及跨域访问问题。 动态控制script标记的生成, 通过修改script标记的src属性完成对跨域页面的调用。 此方案存在的缺陷是, script的src属性完成该调用时采取的方式时get方式, 如果请求时传递的字符串过大时,可能会无法正常运行。 不过此方案非常适合聚合类门户使用。 3、iframe方式。 查看过醒来在javaeye上的一篇关于跨域访问的帖子, 他提到自己已经用iframe的方式解决了跨域访问问题。 数据提交跟获取,采用iframe这种方式的确可以了, 但由于父窗口与子窗口之间不能交互(跨域访问的情况下, 这种交互被拒绝),因此无法完成对父窗口效果的影响。 4、用户本地转储方式: IE本身依附于windows平台的特性为我们提供了一种基于i frame,利用内存来“绕行”的方案, 即两个window之间可以在客户端通过windows剪贴板的 方式进行数据传输, 只需要在接受数据的一方设置Interval进行轮询, 获得结果后清除Interval即可。 FF的平台独立性决定了它不支持剪贴板这种方式, 而以往版本的FF中存在的插件漏洞又被fixed了, 所以FF无法通过内存来完成暗渡陈仓。 而由于文件操作FF也没有提供支持( 无法通过Cookie跨域完成数据传递), 致使这种技巧性的方式只能在IE中使用。 5、我自己用于解决这类问题的方式:结合了前面几种方式, 在访问A网站时,先请求B网站完成数据处理, 再根据返回的标识来获得所需的结果。这种方法的缺点也很明显, B网站的负载增大了。优点,对session也实现了保持, 同时A网站与B网站页面间的交互能力增强了。最重要的一点, 这种方案满足了我的全部需要。 总结一下,以上方案中可选择的情况下,我最推荐on- Demand方式,在不需要提交大量数据的情况下, 这种方式能够解决您的大部分问题。 参考资料: http://www.newbooks.com. cn/info/37166.html
Ⅷ ajax跨域请求jsonp出现Uncaught SyntaxError,该如何解决
Jquery文档中描述,jsonp:”callback”, jsonpCallback:”success_jsonpCallback”,传递这两个参数是有原因的,jsonp的返回数据格式应该是: “客户端传递的回调方法名称(json数据)”。
比如将这段代码
<?php
$arr = array ('username'=>'jack','age'=>21,'gender'=>'male');
echo json_encode($arr);
?>
改为
<?php
$arr = array ('username'=>'jack','age'=>21,'gender'=>'male');
echo $_GET['callback']."(".json_encode($arr).")";
?>
找到两段代码的区别就知道怎么解决啦。
Ⅸ Jquery AJAX跨域问题怎么解决
用JSONP可以实现ajax跨域访问:
jQuery.ajax({
url: 'http://192.168.1.xxx:8080/jsonp.action?arg=123',
type: 'GET',
dataType: "jsonp", // 注意dataType是jsonp
cache: false,
success: function(data){
alert(data.key); //这里就把你传入的123显示出来
}
});
不知道你后台用的是什么语言,如果是JAVA,可以像这样写:
public void jsonp() {
String arg = this.getRequest().getParameter("arg");
this.writeResponse("({key:'" + arg + "'})");
}
Ⅹ 如何解决 Ajax 跨域请求不到的问题
解决ajax跨域问题
方法1:
在服务器端直接设置header内容:Access-Control-Allow-Origin:*
或者
Access-Control-Allow-Origin:允许访问的url
这样就可以直接请求到任何网站或者允许访问的url
php程序这样写:
header('Access-Control-Allow-Origin:*');
或者
header('Access-Control-Allow-Origin:允许访问的url ');
方法2:
在Nginx设置”头信息“直接添加Access-Control-Allow-Origin:*的信息。