javascript 实现jsonp
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的更多相关文章
- javascript笔记——jsonp
上篇博客介绍了同源策略和跨域访问概念,其中提到跨域常用的基本方式:JSONP和CORS. 那这篇博客就介绍JSONP方式. JSONP原理 在同源策略下,在某个服务器下的页面是无法获取到该 ...
- Javascript的jsonp原理
Javascript的jsonp原理 首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...
- JavaScript的jsonp
目录索引: 一.AJAX的概念二.POST && GET三.原生实现AJAX简单示例 3.1 实现代码 3.2 重点说明四.框架隐藏域 4.1 基本概念 4.2 后台写入脚本 4.3 ...
- jquery及原生javascript对jsonp解决跨域问题实例详解
jquery方式 前端: $.ajax({ url: 'http://m.xxx.tv/goLottery', data: { data: data }, type: 'GET', dataType: ...
- JavaScript使用jsonp实现跨域
为什么要把ajax跨域写一下呢,因为ajax跨域并不是想跨就能跨的.因为为了安全,ajax是不允许跨域的. 举个例子,你有一个卖水果的网站,你的ajax请求另一个网站提供的图片,正常的时候,图片是一个 ...
- 原生javascript里jsonp的实现原理
ajax不能跨域,jsonp可以跨域 跨域的核心思想: 调用(拿到的接口),定义(jsonp核心处理器)分别是不同的script标签里面进行跨script取数据(只有get方式进行取数据 ) ...
- javascript实现jsonp跨域问题+原理
在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = ...
- javascript - 封装jsonp
jsonp牵扯到同源策略.跨域等问题,这里不细说了. 实现就是创建动态的script标签来请求后台地址: 示例: jsonp('xxx.php', { uid: 1 }, function (res) ...
- 疯狂的JSONP
何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...
随机推荐
- Nuc900 bsp turbowriter使用注意点
Nuc900 bsp turbowriter使用注意点 一. Nor flash 用turbo 烧写kernel和文件系统时的注意点: 1. kernel的image No要大于rootfs 2.烧写 ...
- java动态缓存技术:WEB缓存应用(转)
可以实现不等待,线程自动更新缓存 Java动态缓存jar包请下载. 源代码: CacheData.java 存放缓存数据的Bean /** * */package com.cari.web.cach ...
- 一个php小白找工作的历程
一个php小白找工作的历程其实对新工作还是有点忐忑的,对于我这样一个有着特殊工作经历的来说更是如此.为了更好的迎接未来,不得不总结下过去.在经历一段时间的职业生涯探索期后,还是觉得自己更适合做程序员这 ...
- DEDE常见问题(转)
问题1. 把数据保存到数据库附加表 `dede_addonvisa` 时出错,请把相关信息提交给DedeCms官方.Unknown column 'redirecturl' in 'field lis ...
- DDMS中File Explorer无法查看data/data文件解决办法
http://www.cnblogs.com/smyhvae/p/3881477.html 找了个连接 问题描述:最近在学习Android SQLite中的SQLiteOpenHelper,使用SQ ...
- 针对苹果最新审核要求为应用兼容IPv6-备用
在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...
- Java DES 测试
package com.des.test; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyEx ...
- PHP中的几个重要比较
1:定义常量 <?php define("TAX_RATE",0.08); echo TAX_RATE; //输出0.08 //2 (PHP 5.3) const TAX_R ...
- ural 1090 In the Army Now
http://acm.timus.ru/problem.aspx?space=1&num=1090 #include <cstdio> #include <cstring&g ...
- python web.py安装使用
官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用 ...