为了账号安全,请及时绑定邮箱和手机立即绑定

有人用js实现了吗?我的不知道为什么实现不了。

var getDOM = function(id){
	return document.getElementById(id);
}
var addEvent = function(id,event,fn){
	var el = getDOM(id) || document;
	if (el.addEventListener) {
		el.addEventListener(event,fn,false);
	} else if(el.attachEvent) {
		al.attachEvent('on'+event,fn);
	}
}
var getElementLeft = function(element){
	var actualLeft = element.offsetLeft;
	var current = element.offsetParent;

	while(current !== null){
		actualLeft += current.offsetLeft;
		current = current.offsetParent;
	}
	return actualLeft;
}
var getElementTop = function(element){
	var actualTop = element.offsetTop;
	var current = element.offsetParent;

	while(current !== null){
		actualTop += current.offsetTop;
		current = current.offsetParent;
	}
	return actualTop;
}
/*ajax*/
var ajaxGet = function(url,callback){
	var _xhr = null;
	if(window.XMLHttpRequest){
		_xhr = new window.XMLHttpRequest(); //非IE
	}else if(window.ActiveXObject){
		_xhr = new ActiveXObject("Msxml2.XMLHTTP"); //IE下
	}
	_xhr.onreadystatechange = function(){
		if(_xhr.readyState == 4 && _xhr.status == 200){
			alert(11);
			callback(JSON.parse(_xhr.responseText));
		}
	}
	_xhr.open('get',url,false);
	_xhr.send(null);
}
/*事件代理*/
var delegateEvent = function(target,event,fn){
	addEvent(document,event,function(e){
		if(e.target.nodeName == target.toUpperCase()){
			fn.call(e.target);
		}
	});
}
/*主体*/
addEvent('search-input','keyup',function(){
	var searchText = getDOM('search-input').value;
	ajaxGet('http://api.bing.com/qsonhs.aspx?q='+searchText,function(v){
		var d = v.AS.Results[0].Suggests;	
		var html = '';		
		for (var i = 0; i < d.length; i++) {
			html += '<li>'+d[i].Txt+'</li>';
		}
		getDOM('search-result').innerHTML = html;
		
		getDOM('search-suggest').style.top = getElementTop(getDOM('search-form'))+38+'px';
		getDOM('search-suggest').style.left = getElementLeft(getDOM('search-form'))+'px';
		getDOM('search-suggest').style.position = 'absolute';
		getDOM('search-suggest').style.display = 'block';
	});
});
delegateEvent('li','click',function(){
	var keyword = this.innerHTML;
	location.href = 'http://cn.bing.com/search?q='+keyword;
});

在搜索框输入字符,调试显示

js-script.js:47 XMLHttpRequest cannot load http://api.bing.com/qsonhs.aspx?q=1. 
    No 'Access-Control-Allow-Origin' header is present on the requested resource. 
    Origin 'null' is therefore not allowed access.ajaxGet @ js-script.js:47(anonymous function) @ js-script.js:60
js-script.js:47 Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': 
    Failed to load 'http://api.bing.com/qsonhs.aspx?q=1'.


正在回答

3 回答

解决方法:跨源问题,添加cors。
1.filter或者servlet里面添加response.setHeader("Access-Control-Allow-Origin", "*");
2.response.setHeader("Access-Control-Allow-Origin", "*");放到接收客户端api 的地方
3.如果是servlet的话就放到get或者post方法里面,jsp页面就扔到第一行
4.如果是filter部署就扔到dofilter()

0 回复 有任何疑惑可以回复我~
#1

苍白的尾巴 提问者

非常感谢!
2016-09-16 回复 有任何疑惑可以回复我~
#2

慕仙5237505

大神,
2017-11-23 回复 有任何疑惑可以回复我~

 可以用nginx反向代理解决跨域问题

0 回复 有任何疑惑可以回复我~
#1

小胡3161632

可以告诉我具体应该怎么做吗
2016-09-29 回复 有任何疑惑可以回复我~

解决了没 我也没处理好这个跨域的问题

0 回复 有任何疑惑可以回复我~
#1

苍白的尾巴 提问者

用fiddler拦截请求,然后重定向,指向本地文件就行。就是模拟文件在访问域,然后进行与服务器的链接。
2016-09-16 回复 有任何疑惑可以回复我~
#2

慕仙5237505 回复 苍白的尾巴 提问者

能详细告诉我具体做法吗?我也卡死在这里呢
2017-11-23 回复 有任何疑惑可以回复我~
#3

苍白的尾巴 提问者 回复 慕仙5237505

根据最佳回答里面的操作就可以啊,用filter模拟一下就可以
2017-12-06 回复 有任何疑惑可以回复我~
#4

慕仙5237505 回复 苍白的尾巴 提问者

哦,多谢辣,还行问下你说的那个filter是什么东西呢
2017-12-06 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消
搜索框制作
  • 参与学习       66042    人
  • 解答问题       431    个

本课程从简入深讲解搜索框的制作,学习JQ与JS实现Ajax技术的不同点

进入课程

有人用js实现了吗?我的不知道为什么实现不了。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信