零JS筆記 | Ajax-跨域-百度提示-豆瓣
解決跨域問題:服务器代理或jsonp
1、script標籤;
2、在資料加載進來之前,定義好一個fn,fn接收一個參數,fn裏再拿數據;然後需要時通過script標籤加載對應的遠程文件資源,當遠程文件資源被加載時會執行前面定義好的fn,並且把數據當fn參數傳入;
如:1.txt内容为:
fn([1,2,3])
然后在html开头使用script定义fn,一定要放前面,如放window.onload 里,需使用window.fn(){..}这样调用
function fn(data) {
alert(data)
}
之后下面window.onload
window.onload = function () {
var btn = document.getElementById('btn')
btn.onclick = function () {
//当按钮点击时再去加载远程资源,让他执行;
var _script = document.createElement('script')
_script.src = '1.txt'
document.body.appendChild(_script)
}
}
因此,操作别的网站的json数据,主要是能够找到调用的命我空间,即,可以有callback=fn的函数
调用接口实现百度下拉提示:
1)、找到接口,http://suggestion.baidu.com/su?wd=keyword&cb=elmok及调用命名,如elmok即我们可以使用的函数名;
2)、使用实时创建script标签
var _script = document.createElement('script')
_script.src = "http://suggestion.baidu.com/su?wd="+this.value+"&cb=elmok"
document.body.appendChild(_script)
3)、开头创建elmok函数使用数据;
function elmok(data){
var _ul = document.getElementById('ul1')
var html =''
if(data.s.length){ //如果得到数据的长度不为0
_ul.style.display = 'block'
for(var i=0;i<data.s.length;i++){
html+='<li><a target="_blank" href="https://www.baidu.com/s?&wd='+data.s[i]+'">'+data.s[i]+'</a></li>'
}
_ul.innerHTML = html;
}
}
得到的数据如图:
可看到 data.s[i]即为数组,可以循环这个数据输出显示为提示内容;
运行
豆瓣搜索接口:
1)、找到接口callback名:http://api.douban.com/book/subjects?q=keyword&alt=xd&callback=elmok
2)、使用script标签创建
btn.onclick = function () {
if(_q.value !=''){
var _script = document.createElement('script')
_script.src = "http://api.douban.com/book/subjects?q="+_q.value+"&alt=xd&callback=elmok"
document.body.appendChild(_script)
}
}
2)、开头创建elmok函数使用数据
function elmok(data){
var msg = document.getElementById('msg')
var _list = document.getElementById('list')
msg.innerHTML = data.title.$t + ':'+data['opensearch:totalResults'].$t
var _entry = data.entry;
var html = ''
for(var i=0;i<_entry.length;i++){
html+='<dl><dt>'+_entry[i].title.$t+'</dt><dd><img src='+_entry[i].link[2]['@href']+' /></dd>'
}
_list.innerHTML = html
}