
RT ,用户服务网站的时候,有时候是用 abc.com 打开,有时候用 www.abc.com , jquery 发送 ajax 请求的时候,如果用户是用 abc.com 访问的,发送请求时如果用 www.abc.com ,获取不到数据,这种情况通常怎么解呢?
1 abelyao 2016-01-19 21:12:24 +08:00 via iPhone 如果是 AJAX 的话服务端可以设置允许跨域啊,这样的问题随便搜一下都一堆解决方式… |
3 yangxiongwei 2016-01-19 21:23:57 +08:00 js 里面用相对路径发请求啊,斜杠开头 |
4 gamexg 2016-01-19 21:25:56 +08:00 via Android 可以限制可跨域的域名。 更好的解决办法是 abc. com 重定向到 www.abc. com. ajax 硬编码的域名? |
5 lxrmido 2016-01-19 21:35:25 +08:00 1 、在 www.abc.com 下做个中转页面,这个页面里设置 document.domain 为 abc.com ,在这个页面里写个 ajax 函数; 2 、 abc.com 的页面中建个 iframe , iframe 指向上面建立的中转页面,然后要 ajax 时调用上面的 ajax 函数。 |
6 anai1943 OP @yangxiongwei @gamexg 恩 部分 ajax 请求就是这么写的,斜杠开头。 现在时有一个特殊的场景,发送 ajax 的 url 是后端生成的 html 里面取的,蛋疼。不想改动 nginx 的配置文件了。用$_SERVER['HTTP_HOST']来识别访问的 url 是否是有 www ,后端处理了。。。 |
7 zkd8907 2016-01-19 21:37:24 +08:00 jsonp 方法,后台返回类似_Callback({..})格式的数据 |
9 hxsf 2016-01-19 21:43:33 +08:00 js 里 用 location.host 来代替就行 |
10 Zzzzzzzzz 2016-01-19 21:46:50 +08:00 服务器输出相应 CORS 头就行, IE8 和 IE9 的话可以用 XDomainRequest,jquery 的话引用个第三方 transport 可以支持. 不过你带不带 www 都是同一个, 就请求的绝对链接有问题的话直接 hack 一下 ajax 函数的入口把 url 清理一下就好了. |
12 sneezry 2016-01-19 21:48:45 +08:00 问题本身的解决办法:用相对路径替代绝对路径 问题本身反映的问题, www 与不带 www 是两个不同的网站,如果输出相同的内容,应该做 301 跳转,这样对用户方便,对搜索引擎友好,也不会被搜索引擎降权 |
13 Felldeadbird 2016-01-19 22:38:07 +08:00 以 PHP 为例, header("Access-Control-Allow-Origin:*"); header('Access-Control-Allow-Methods:POST,GET'); header('Access-Control-Allow-Credentials:true'); 第一行就是声明那些来源域名允许跨域。 其他语言也差不多这样设置。 至于安全嘛,这些跨域会产生什么安全呢?还有, ajax 即使不声明上述的设置,人家 ajax post 内容一样会到你后端去。所以 在后面 我通常会再判断是否 白名单域名,不是就直接终止运行。 |
14 ccbikai PRO $.ajax('/test') 路径这样写 |
15 adeweb 2016-01-19 23:20:13 +08:00 via iPhone jsonp ,回调的函数名是一个约定生成的随机字符,比如 Callback84jdg4q9p({})。 |