почему только выполнить onreadystatechange один раз? - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь подключиться к серверу для входа в систему, но при отправке запроса на подтверждение состояние (statechange) остается в 1 (соединение установлено), а затем теряется.очевидно, onreadystatechange запускается только один раз, но я понятия не имею, почему и исследовал, но информация, которую я нашел, была не в моем случае.

var peticion
var net = {}
var strQuery

/* global XMLHttpRequest ActiveXObject */

window.onload = function () {
  var btn = document.getElementById('comprobar')
  btn.addEventListener('click', validate)
  strQuery = 'login=' + encodeURIComponent(document.getElementById('login').value + '&nocache=' + Math.random())
}

function validate () {
  peticion = new net.CargarContenidos('http://localhost/Paginas/AJAXTest/servidor/compruebaDisponibilidad.php', mostrar, strQuery)
}

function mostrar () {
  console.log('si entro')
  console.log(peticion.req.responseText)
}

net.READY_STATE_UNINITIALIZAED = 0
net.READY_STATE_LOADING = 1
net.READY_STATE_LOADED = 2
net.READY_STATE_INTERACTIVE = 3
net.READY_STATE_COMPLETE = 4

net.CargarContenidos = function (url, funcion, data, funcionError) {
  this.url = url
  this.req = null
  this.onload = funcion
  this.onerror = this.defaultError
  this.cargaContenidosXML(url, data)
  console.log('finish')
}

net.CargarContenidos.prototype = {
  cargaContenidosXML: function (url, data) {
    if (window.XMLHttpRequest) {
      this.req = new XMLHttpRequest()
      console.log(this.req)
    } else if (window.ActiveXObject) {
      this.req = new ActiveXObject('Microsoft.XMLHTTP')
    }
    if (this.req) {
      try {
        var loader = this
        this.req.onreadystatechange = function () {
          loader.onReadyState()
        }
        this.req.open('POST', url, true)
        this.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        this.req.send(data)
      } catch (err) {
        alert('error: ' + err)
      }
    }
  },

  onReadyState: function () {
    var req = this.req
    var ready = req.readyState
    console.log(ready)
    if (ready == net.READY_STATE_COMPLETE) {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
      var httpStatus = req.status
      if (httpStatus == 200 || httpStatus == 0) {
        this.onload()
      }
    }
  },
}

Я студент, и я был бы очень признателен за совет, заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...