2017-02-15 5 views
0

입력란에 빨리 입력 할 때 입력란에을 너무 빨리 입력하면 브라우저에서 금지 된 403 번 브라우저 이 표시됩니다. 노드와 Js를 연결하고 백엔드에서을 표현하고 있습니다.금지 된 오류

다음은 입력을 유지하는 코드입니다.

import React, {Component, PropTypes} from 'react'; 

export default class SearchBox extends Component { 

    constructor(props) {  
     super(props); 
     this.state = { 
      name: "", 
      typing :false, 
      typingTimeOut :0, 
     }; 
     this.changeName=this.changeName.bind(this); 
     this.sendtoParent=this.sendtoParent.bind(this); 
    } 

    changeName(event) { 
     const self=this; 

     if(self.state.typingTimeOut) 
     { 
      clearTimeout(typingTimeOut); 
     } 

     self.setState({ 
      name: event.target.value, 
      typing:false, 
      typing: setTimeout(function(){ 
       self.sendtoParent(self.state.name)},1000) 
     }); 
    } 

    sendtoParent(){  
     this.props.searching(this.state.name,"true"); 
    } 

    render() { 
     return (
      <div > 
       <input 
        style={styles} 
        id="SearchBox" 
        type="text" 
        placeholder='Enter the name' 
        onChange={this.changeName} 
       />     
      </div> 
     ); 
    } 
} 

내 이름은 나중에 나에게 Github의 검색 API에서 필요한 JSON을주는 부모로 이동합니다. 정상적으로 입력 할 때 코드가 완벽하게 작동하지만 Typing Fast에 403 오류가 발생합니다.

+1

'입력의 사용이 뭐죠 : FALSE '

가장 쉬운 방법은 다음과 같이로로 changeName 기능을 수정하는 것입니다? API 호출 중에 입력을 차단 하시겠습니까 ?? –

답변

1

Github에는 전송할 수있는 초당 요청 수에 제한이 있습니다. 당신은 요청을 보내는 것을 지연시키기 위해 당신의 메소드에 타임 아웃을 도입하려고 시도하고있다. 이것은 좋은 접근 방법이다. 그러나 구현되는 방식으로는 작동하지 않을 것이다.

changeName(event) { 
    const self=this; 

    if(self.typingTimeOut) 
    { 
     clearTimeout(self.typingTimeOut); 
    } 

    self.typingTimeOut = setTimeout(function(){ 
      self.sendtoParent(self.state.name)},1000); 

    self.setState({ 
     name: event.target.value, 
     typing:false 
    }); 
} 
+0

부분적으로 작동했습니다. 어떤 경우에는 여전히 오류가 발생합니다. 오류를 제거하고 다시 시작하려면 서버를 다시 시작해야합니다. 오류가 발생하기 전에 상태로 롤백 할 수있는 방법이 있습니까? 일단 금지 된 오류가오고 있기 때문에 올바른 값이나 천천히 입력 할 때조차도 계속됩니다. – shinite

+0

api 한도에 가까워지고있는 것처럼 보입니다. 이 사이트를 확인하십시오 : https://developer.github.com/v3/rate_limit/ 스크립트가 그 한계를 깨뜨리지 않을 것이라고 확신하는 것으로 수정하십시오. 즉 타임 아웃을 증가시킨다. –