用JSONP解决ajax跨域问题

前端之家收集整理的这篇文章主要介绍了用JSONP解决ajax跨域问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

JSONP:JSON With Padding

要点:

1.script标签

2.用script标签加载资源是没有跨域问题的

概要:

在资源加载进来之前先定义一个函数,这个函数接受一个参数(数据),函数里面利用这个参数做一些事情。

然后在需要的时候通过script标签加载对应远程文件资源,当远程的文件资源被加载进来的时候,就会执行我们前面定义好的函数,并且把我们想拿到的数据当做这个函数的参数传入进去。

小例子:

<body>
		<script type="text/javascript">
			function fn(data){
				alert(data);
			}
		</script>
		<script src="1.txt">
			/*
			 * 1.txt中的内容:fn([1,2,3]);
			 * 也就是执行了上面定义的fn函数
			 * script的src属性可以加载任何类型的文件,但文件里存放的必须是js语句
			 */
		</script>
	</body>
程序运行结果:

当然这只是最基本的理解,对于JSONP的运用还有很多特定的规则

下面再通过两个例子说明:

首先我在自己的个人服务器上放置一个txt文件,以便跨域读取用:

注意里面的test函数,是运用JSONP的核心。

	<body>
  <script type="text/javascript">
   function test(data) {
    var html = "";
    for(var i = 0; i < data.s.length; i++) {
 html += '<li style="list-style:none">' + data.s[i] + '</li>';
     document.getElementById("god").innerHTML = html;
    }
 }

   function cli() {
    var oScript = document.createElement("script");
    oScript.src = "ftp://linhuo:*********@hk3035.hndan.com/web/test/1.txt";
    document.body.appendChild(oScript);
   }
  </script>
  <input type="button" name="" id="" value="点击" onclick="cli()" />
  <div style="border:1px solid black;width:300px;height:250px;" id="god">JSONP</div>


 </body>

我们再来看百度的实时推荐效果

这也是利用了跨域加载技术,实现起来也不难:

<body>
		<script type="text/javascript">
			function test(data) {
				var oUl = document.getElementById("list");
				var html = "";
				if(data.s.length) {
					oUl.style.display = "block";
					for(var i = 0; i < data.s.length; i++) {
						html += '<li><a href="">' + data.s[i] + '</a></li>';
					}
					oUl.innerHTML = html;
				} else {
					oUl.style.display = "none";
				}
			}
			window.onload = function() {
				var in_put = document.getElementById("in");
				var oUl = document.getElementById("list");

				in_put.onkeyup = function() {
					if(this.value != "") {
						var oScript = document.createElement("script");
						oScript.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=" + this.value + "&cb=test";
						document.body.appendChild(oScript);
					}else{
						oUl.style.display = "none";
					}
				}

			}
		</script>

		<input type="text" name="" id="in" value="" />
		<ul id="list">
                </ul>

	</body>

猜你在找的Json相关文章