ajax
let wd=event.target.value
let xhr=new XMLHttpRequest();
xhr.open('GET' ,`https:
xhr.onreadystatechange=function () {
if (xhr.readState==4 &&/2\d{2}/ .test(xhr.status)){
}
}
jsonp
let wd=event.target.value;
let script=document .createElement('script' )
script.src=`http: `
document .body.appendChild(script)
jquery
let wd=event.target.value;
this .setState({wd},()=>{
$.ajax({
type:'GET' ,
utl:`http: `,
dataType:'jsonp' ,
jsonp:'cb' ,
data:{wd},
success:(result)=>{
this .setState({words:result.s})
}
})
})
import React,{Component} from 'react'
import ReactDOM from 'react-dom'
import 'bootstrap/dist/css/bootstrap.css'
import $ from 'jquery'
class Search extends Component {
constructor(){
super ();
this .state={wd :'' ,words :[],index :-1 };
// jsonp
/* window .jsonpCb = (result) => {
console .log(result)
let words=result.s;
this .setState({words :result.s})
}*/
}
handleChange =(event) => {
// ajax
/* let wd=event.target.value;
// fetch(`https: `)// 向後臺發請求
let xhr=new XMLHttpRequest();
xhr.open('GET' ,`https: `,false )
xhr.onreadystatechange=function (){
if (xhr.readyState==4 &&/2\d{2}/ .test(xhr.status)){
}
}*/
// jsonp
/*let wd=event.target.value;
let script=document .createElement('script' );
script.src=`https: `;
document .body.appendChild(script);
this .setState({wd})*/
// jquery
let wd=event.target.value;
this .setState({wd},()=>{
$.ajax({
type:'GET' ,
url:`https: `,
dataType:'jsonp' ,// 制定響應體的內容類型
jsonp:'cb' ,// 指定在後臺接收回調方法名的參數名
data:{wd},
success:(result)=>{
this .setState({words:result.s})
}
})
})
//成功的回調方法2
/* }).then (success:(result)=>{
this .setState({words:result.s,wd})
}) */
}
handleKeyDown =(event) => {
let keyCode=event.keyCode
if (keyCode==40 ||keyCode==38 ){// 下
let index=this .state.index
if (keyCode==40 ){
if (++index>=this .state.words.length){
index=-1
}
}else if (keyCode==38 ){
if (--index==-2 ){
index=this .state.words.length-1
}
}
this .setState({index})
}
}
render(){
return (
<div className="container" >
<div className="row" >
<div className="col-md-8 col-md-offset-2" >
<div className="panel panel-default" >
<div className="panel-heading" >
<input
onKeyDown={this .handleKeyDown}
type="text"
value={this .state.index==-1 ?this .state.wd :this .state.words[this .state.index]}
onChange={this .handleChange}
className="form-control" />
</div>
<div className="panel-body" >
<ul className="list-group" >
{this .state.words.map((item, index) => (
<li className={"list-group-item " +(index==this .state.index?'active' :'' )} key={index}>
{item}
</li>
)) }
</ul >
</div >
<div className ="panel -footer ">
</div >
</div >
</div >
</div >
</div >
)
}
}
ReactDOM .render (<Search />,document .querySelector('#root' )) ;