注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

关于Ajax跨域的实现  

2011-06-16 22:31:05|  分类: web前端技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
我们都知道由于javascript的同源策略,所以使得javascript的跨域变的基本不可能,但是对于跨子域来说,我们可以添加
document.domain配合iframe来实现Ajax的跨子域实现,不过这样带给我们额外的开销,而且往往我们需要跨全域而不是跨子域。
对于必须要进行跨域通信,我个人觉得还是由后端服务来做,不要借助javascript来进行。
但是在某些特定的情况下,我们不得不应用Ajax来进行跨域通信,可能我们对服务端没有权限,又可能服务商提供了一个ajax跨域的接口。
本文就Ajax跨域实现的原理进行简单的介绍,具体应用实例可以自己百度一下把。

Ajax跨域的主要实现思想便是:
<script src="http://analytics.163.com/ntes.js" type="text/javascript"></script>
大家都知道,这样的代码是可以进行跨域链接外部的js脚本的,但是看下面的代码:

<script src="http://analytics.163.com/alert.php" type="text/javascript"></script>
alert.php的代码很简单:
<?php 
echo "alert('success')"
?>

大家会惊奇的发现这段alert('success')代码被顺利的运行了,这就是我们实现Ajax跨域的基础,现在让我们发起一个跨域的Ajax请求把。
比如我们验证用户输入的用户名是否存在!需要访问用户服务器,进行Ajax跨域请求。
var name = "snoopy"  //比如用户输入的是snoopy
然后我们在头部创建一个<script>标签,将src设置为
var src_url = "http://user.163.com/check.php?name=snoopy&callback=cb_fn" ;   
//将name和回调函数名以get方式传参过去,这样就成功发送了一次跨域请求
如果是做统计或者一些不需要PHP端响应的操作,这样就可以了,但是很多时候我们需要PHP端对前端发过来的跨域请求进行处理和返回,所以PHP端需要这样写:
1,接收前端传递过来的name和callback的值
2,处理name的数据,将返回值保存成json或者字符串形式,具体视接口定义。
3,直接echo回调函数名,并且将返回值以参数的形式放入回调函数中,
这样就可以在php端处理完数据后执行js的回调函数,这也就是为什么我们发送跨域请求的时候需要把回调函数名字也发送过去。

这样Ajax跨域就实现了,但是由于只能get方式,所以建议一般跨域的Ajax请求不要传输一些敏感的数据,只是拿来做一些验证,统计或者广告的内容。












  评论这张
 
阅读(1030)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016