JSONP跨域请求+简答实现百度搜索
什么是跨域呢?比如说 什么是JSONP
script标签怎么引入数据我们如果知道操作系统并不是靠后缀名来识别一个文件的,是靠文件里面的内容来识别的,后缀名知识更利于第三方的软件进行查看。比如说我们把 就算能引入资源,那么资源怎么使用呢先举个简单地例子,比如我们在一个 "text";
我们在HTML中去加载它,然后去执行,如下代码: <script src="./a.json"></script>
<script> alert(str); //text </script>
这样是能正确执行了,但是我们也知道json数据中并没有定义什么变量和方法的,这个就好像下面的方式: var str="text";
我们在HTML中去加载它,然后去执行,如下代码: <script src="./a.json"></script>
<script> alert(str); //error </script>
这样显然是会报错的,那么跨域解决之后就要解决怎么使用这个资源的问题了。 function solve(data){
//使用数据
}
<script src="./a.json"></script>
下面我们来看看 solve(100);
solve({});
//相当于a.json里面的数据作为参数传递到了solve函数里面,然后,在solve函数里面操作这个数据就可以了
资源里面要有几个方法先看下面的例子,当我们引入一个PHP动态资源的时候 <?php
$t = isset($_GET['t']) ? $_GET['t'] : 'num';
$a = "111";
$b = "aaa";
if ($t == 'num') {
$data = json_encode($a);
} else {
$data = json_encode($b);
}
echo solve($data)
比如我们有两个按钮一个按钮执行的时候要求,收到 <?php
$t = isset($_GET['t']) ? $_GET['t'] : 'num';
$callback = isset($_GET['callback']) ? $_GET['callback'] : 'fn1';
$arr1 = array('222221','22222222','33333333','4444444','555555555555555555555');
$arr2 = array('aaaaaaaaaaaa','bbbbbbbb','cccccccccccc','ddddddddd','eeeeeeeeeeee');
if ($t == 'num') {
$data = json_encode($arr1);
} else {
$data = json_encode($arr2);
}
echo $callback.'('.$data.');';
这样就能很好的规避这个问题了。 好了,如果上面的东西你都连接了,那么你就差不多知道什么是跨域和怎么解决跨域了,那么光说不练还是不好的,我们就用百度的搜索API来简单联系一下。 当然啦,还有一个重要的问题,jsonp加载的时候应该是动态加载的,我们应该用代码创建。具体的说明请看下面的demo 简单说实现百度搜索<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style> *{padding: 0;margin: 0;} #q {width: 300px; height: 30px; padding: 5px; border:1px solid #f90; font-size: 16px;} #ul1 {border:1px solid #f90; width: 310px; margin: 0;padding: 0; display: none;} li a { line-height: 30px; padding: 5px; text-decoration: none; color: black; display: block;} li a:hover{ background: #f90; color: white; } </style>
<script> function solve(data) {//得到百度API返回的数据 var Show = document.getElementById('show'); var html = ""; //debugger if(data.s.length) { Show.style.display = 'block'; var len = data.s.length; for (var i=0; i<len; i++) {//逐条显示 html += '<li><a target="_blank" href="http://www.baidu.com/s?wd='+data.s[i]+'">'+ data.s[i] +'</a></li>'; } Show.innerHTML = html; }else{ Show.style.display = "none"; } } window.onload = function(){ var oQ = document.getElementById('q'),Show = document.getElementById('show'); oQ.onkeyup = function(){//当有键盘事件的时候 if(this.value!=""){ var oScript = document.createElement("script");//创建一个script标签,准备引入资源 oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=solve'; /*上面的两行就相当于<script src="ziyuan"> </script>*/ document.body.appendChild(oScript);//加入的body中 } else{ Show.style.display = "none"; } } } </script>
</head>
<body>
<input type="text" id="q">
<ul id="show"></ul>
</body>
</html>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |