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 2016-01-19 22:56:58 +08:00
$.ajax('/test') 路径这样写
|
15
adeweb 2016-01-19 23:20:13 +08:00 via iPhone
jsonp ,回调的函数名是一个约定生成的随机字符,比如 Callback84jdg4q9p({})。
|