2017-02-15 4 views
0

Я получаю запрещенную ошибку 403 в браузере , когда я набираю слишком быстро в поле ввода. Я использую React Js с узлом и Express на бэкэнд.Запрещенная ошибка При быстром вводе ввода в поле ввода

Ниже приведен код, в котором хранятся данные.

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> 
     ); 
    } 
} 

Меня зовут идет учредителю, который позже дает мне необходимую JSON из Github Search API. Мой код работает отлично, когда я печатаю нормально, но он дает ошибку 403 в Typing Fast.

+1

, Что использование 'типизации: false'? вы хотите заблокировать ввод текста во время вызова api? –

ответ

1

Github имеет ограничение по количеству запросов в секунду, которое вы можете отправить. Вы пытаетесь ввести тайм-аут в своем методе, чтобы отложить отправку запросов, что является хорошим подходом, но так, как он реализован, он не будет работать.

Самый простой способ изменить вашу функцию changeName на что-то вроде этого:

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

Он частично работал. В некоторых случаях я все еще получаю ошибку. Чтобы удалить ошибку и начать снова, мне нужно перезагрузить свой сервер. Есть ли способ, с помощью которого я могу откатиться к состоянию до возникновения ошибки? Потому что, как только ошибка Forbidden начинается, она продолжает появляться даже для правильных значений или когда я печатаю медленно. – shinite

+0

Похоже, вы приближаетесь к пределу api. Проверьте этот сайт: https://developer.github.com/v3/rate_limit/ и адаптируйте скрипт к чему-то определенному, который не нарушит этот предел. то есть увеличение тайм-аута –

Смежные вопросы