jsonp ajax 跨域访问怎么实现的
说说个人理解。首先需要知道几个知识:
跨域js是允许的。比如你在localhost跑一段html,里面引用了<script href="http://www.baidu.com/xxxx.js"></script>这是完全允许的。
动态加载js是允许的。可以通过js创建一个<script>,设置它的href="http://跨域域名/xxx.js",然后appendChild到<head>里去,浏览器会加载这段js并执行。
js的href可以指向动态脚本,比如<script href="http://某域名/xxx.php?key1=value1&key2=value2">
jsonp请求,服务器给的返回值实质上是js代码。jsonp是利用1 2和3的特点来实现的。
jsonp的具体过程为:
请求前,写好一个回调函数比如jsonpCallback = function(data) { ... }。
请求时,利用1 2 3的特性,加载一个js文件:url形如"http://跨域域名/jsonp.php?callback=jsonpCallback&其它参数"。
服务器读区callback函数的函数名,计算好要返回的值比如data={a:b, c:d},拼接一段js代码:jsonpCallback(data)。传给客户端的内容变成jsonpCallback({a:b, c:d})
前端拿到js代码,执行jsonpCallback({a:b, c:d}),jsonp的过程完成。