jsonp原理其实也简单,虽然ajax不能跨域,但是通过src这个属性我们可以实现跨域,其实和我们引入第三方jquery调用它的方法一样的。

html:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>jsonp</title>
<meta name="description" content="">
<meta name="keywords" content="">
<script>
function jsonp(data){
var oUl = document.getElementsByTagName('ul')[0];
var aLi = oUl.getElementsByTagName('li');
if(data.s.length){
var htmlText = '';
oUl.style.display = 'block';
for(var i = 0 ; i < data.s.length; i++){
htmlText += '<li><a target="_blank" href="http://www.baidu.com/s?wd='+data.s[i]+'">'+data.s[i]+'</a></li>';
}
oUl.innerHTML = htmlText
}else{
oUl.style.display='none'
}
}
document.onclick = function(e){
console.log(e.target.nodeName)
if(e.target.nodeName.toLowerCase() != 'input'){
document.getElementsByTagName('ul')[0].style.display = 'none'
}
}
window.onload = function(){
var oInput = document.getElementById('search');
oInput.oninput = function(){
var that= this;
var scriptTag = document.getElementsByTagName('script');
var tempScript =[];
var reg = /http:\/\/suggestion\.baidu\.com\/su\?wd=(.*)&cb=jsonp/;
if(scriptTag.length>1){
for(var i=0 ;i<scriptTag.length;i++){
if(scriptTag[i].src && reg.test(scriptTag[i].src)){
document.body.removeChild(scriptTag[i]);
var oScript = document.createElement('script');
oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=jsonp';
document.body.appendChild(oScript);
}
}
}else{
var oScript = document.createElement('script');
oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=jsonp';
document.body.appendChild(oScript);
}
}
}
</script>
<style>
input{
width:200px;
height:40px;
line-height: 40px;
text-indent: 5px;
outline:none;
border:1px solid #333;
}
ul{
list-style: none;
padding:0px;
margin:0px;
width:200px;
border:1px solid #333;
display: none;
}
ul li{
padding: none;
margin:0px; }
ul li:hover{
background:#f1f1f1;
}
ul li a{
text-decoration: none;
color:#333;
height:40px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width:100%;
line-height: 40px;
}
</style>
</head>
<body>
<input type="text" id="search">
<ul>
</ul>
</body>
</html>

js:

<script>
function jsonp(data){
var oUl = document.getElementsByTagName('ul')[0];
var aLi = oUl.getElementsByTagName('li');
if(data.s.length){
var htmlText = '';
oUl.style.display = 'block';
for(var i = 0 ; i < data.s.length; i++){
htmlText += '<li><a target="_blank" href="http://www.baidu.com/s?wd='+data.s[i]+'">'+data.s[i]+'</a></li>';
}
oUl.innerHTML = htmlText
}else{
oUl.style.display='none'
}
}
document.onclick = function(e){
console.log(e.target.nodeName)
if(e.target.nodeName.toLowerCase() != 'input'){
document.getElementsByTagName('ul')[0].style.display = 'none'
}
}
window.onload = function(){
var oInput = document.getElementById('search');
oInput.oninput = function(){
var that= this;
var scriptTag = document.getElementsByTagName('script');
var tempScript =[];
var reg = /http:\/\/suggestion\.baidu\.com\/su\?wd=(.*)&cb=jsonp/;
if(scriptTag.length>1){
for(var i=0 ;i<scriptTag.length;i++){
if(scriptTag[i].src && reg.test(scriptTag[i].src)){
document.body.removeChild(scriptTag[i]);
var oScript = document.createElement('script');
oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=jsonp';
document.body.appendChild(oScript);
}
}
}else{
var oScript = document.createElement('script');
oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=jsonp';
document.body.appendChild(oScript);
}
}
}
</script>

  

javascript 实现jsonp的更多相关文章

  1. javascript笔记——jsonp

    上篇博客介绍了同源策略和跨域访问概念,其中提到跨域常用的基本方式:JSONP和CORS.   那这篇博客就介绍JSONP方式.   JSONP原理   在同源策略下,在某个服务器下的页面是无法获取到该 ...

  2. Javascript的jsonp原理

    Javascript的jsonp原理   首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...

  3. JavaScript的jsonp

    目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...

  4. jquery及原生javascript对jsonp解决跨域问题实例详解

    jquery方式 前端: $.ajax({ url: 'http://m.xxx.tv/goLottery', data: { data: data }, type: 'GET', dataType: ...

  5. JavaScript使用jsonp实现跨域

    为什么要把ajax跨域写一下呢,因为ajax跨域并不是想跨就能跨的.因为为了安全,ajax是不允许跨域的. 举个例子,你有一个卖水果的网站,你的ajax请求另一个网站提供的图片,正常的时候,图片是一个 ...

  6. 原生javascript里jsonp的实现原理

    ajax不能跨域,jsonp可以跨域 跨域的核心思想:      调用(拿到的接口),定义(jsonp核心处理器)分别是不同的script标签里面进行跨script取数据(只有get方式进行取数据 ) ...

  7. javascript实现jsonp跨域问题+原理

    在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = ...

  8. javascript - 封装jsonp

    jsonp牵扯到同源策略.跨域等问题,这里不细说了. 实现就是创建动态的script标签来请求后台地址: 示例: jsonp('xxx.php', { uid: 1 }, function (res) ...

  9. 疯狂的JSONP

    何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...

随机推荐

  1. a标签增加onclick事件提示未定义function

    项目使用的是ext框架,版本是ext4.2 出现的问题代码如下: renderer : function(value){ var html = "<a href=\"java ...

  2. java rmi 使用方法

    server package Server; import java.rmi.Naming; import java.rmi.RMISecurityManager; import java.rmi.r ...

  3. 2013 多校联合2 D Vases and Flowers (hdu 4614)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  4. Flask源码阅读笔记(一)

    作者:acezio链接:https://zhuanlan.zhihu.com/p/21358368来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. flask的url r ...

  5. 查看文件系统类型的Linux命令

    不需挂载就能查看的命令:   1. file  [root@localhost dev]# file -s /dev/sda1 /dev/sda1: Linux rev 1.0 ext4 filesy ...

  6. cocos2d(粒子效果编辑器)

    ParticleDesigner  for  Mac下载地址:http://www.cocoachina.com/bbs/read.php?tid=108339 最近在做一款粒子编辑器 其实就是在co ...

  7. 可控制转速CSS3旋转风车特效

    以前制作网页动画一般使用javascript,现在已经有越来越多动动画使用纯CSS实现,并且动画的控制也可以使用CSS3实现,因为CSS 3来了,CSS 3的动画功能确实强大.以下是一个纯CSS3制作 ...

  8. Tuple初探

    /*****************版权声明************************/ 大家好,我是小鸭,有问题可来邮件咨询:lxyjiang@gmail.com /************* ...

  9. Cracking the coding interview--Q1.2

    原文 Implement a function void reverse(char* str) in C or C++ which reverses a null-terminated string. ...

  10. codeforces284 div1 B:概率dp

    蛋疼的期末..好久没有A题了,,惭愧啊 昨晚打起精神准备做cf 结果竟然忘记注册了..拿学长号看了看题,今早起来补了一道dp 题目大意: 有n首歌,你需要边听边猜 对于第 i 首歌 每听一分钟你猜出它 ...