由于同源策略的限制,ajax不能发送跨域请求。
即,www.google.com
域内的js,无法用ajax请求不是www.google.com
域内的服务器。
如果一定要发送跨域请求,可以尝试动态创建script标签,
因为<script src="..."></script>
是可以发送跨域请求的。
为了支持跨域请求,服务器端需要做调整,
并不是直接返回json,而是返回可用的js代码。
例如:
如果Get请求:http://jsonp.google.com/Home/TestJsonp?callback=f
返回:f(1)
则,<script src="http://jsonp.google.com/Home/TestJsonp?callback=f"></script>
就相当于:
<script>
f(1)
</script>
其中,f
是已经定义好的window.f
方法。
这样就完成了跨域调用,把数据“1
”传递过来了。
注:
(1)jsonp服务只需要支持Get请求即可,因为script标签无法发起Post请求。
(2)jsonp服务需要确定返回的回调函数名,使用callback
来标记只是办法之一。
网友评论