2015-08-05 4 views
0

Когда уничтожен XMLHttpRequest?Что такое жизненный цикл XMLHttpRequest? Когда будет уничтожен XMLHttpRequest?

Я просто написал простую функцию ниже, и xmlhttp был отправлен успешно, но responseText не отправляется на функцию SetStringinDiv(). Переменная str пуста, а переменная location имеет значение.

Я понятия не имею, как это исправить, и я не знаю, что такое ключевое слово для этой проблемы. Если такой вопрос уже существует, скажите мне, как его найти или что такое ключевое слово.

<script> 
function foo(){ 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      var str = xmlhttp.responseText; 
      SetStringinDiv("div1", str); 
     } 
    } 
    xmlhttp.open("GET", "uri", true); 
    xmlhttp.send(); 
} 
</script> 
<script> 
function SetStringinDiv(location, str) { 
    document.getElementById("location").innerHTML = location; 
    document.getElementById("str").innerHTML = str; 
    if (document.getElementByID(location) == null) { 
     document.getElementById("error").innerHTML += ">> error, can not find the div, " 
       + location + "\n"; 
    } 
    document.getElementByID(location).innerHTML = str; 
} 
</script> 

ответ

0

Проверьте наличие xmlhttp.status! = 200 и распечатайте сообщение об ошибке. Распечатайте readistate и status при каждом вызове onreadystatechange. Я думаю, вы увидите сообщение об ошибке в statusText.

В настоящее время не рекомендуется использовать обратный вызов onreadystatechange. Я использую приведенный ниже код. Обратите внимание, что если сервер не отвечает и не закрывает соединение, ваш запрос не будет таймаутом в течение некоторого времени (2-5 минут) - либо в вашем коде, либо ниже. Если он сидит там, выключите сервер. Тогда вы получите немедленный ответ об ошибке.

var req = new XMLHttpRequest(), 
    done = function(response) { 
    callback(cache[uri.split('/').pop()] = cache[uri] = response); 
    }; 
req.open("GET", uri + ".lispz", true); 
req.onerror = function(err) { 
    done({ 
    uri: uri, 
    error: err 
    }); 
} 
req.onload = function() { 
    return (req.status != 200) ? req.onerror(req.statusText) : done(run(req.responseText)); 
}; 
req.send(); 
+0

или вы можете установить другой тайм-аут по вашему запросу – Kaiido

+0

хорошо, если я не использую функцию SetStringinDiv(), я могу получить responseText со стороны document.getElementById («div1»). InnerHTML = xmlhttp.responseText ; Мне просто интересно, почему я не могу использовать другую функцию, чтобы сделать это с детекцией ошибок, в конце концов, обычно не получается получать сообщение об ошибке при редактировании веб-страницы в eclipse. И, спасибо за вашу рекомендацию, я буду учитывать ее при разработке сеть сидеть – Bob

+0

моя проблема решена. из-за глупой проблемы с орфографией. но я очень ценю ваш ответ. это мой первый вопрос в переполнении стека. и спасибо за ваш ответ. Я согласен с вашим советом по кодированию скромно – Bob

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