Я пишу приложение браузера, который был бы полностью AJAX инициативы (первый раз в жизни), что означает:XMLHttpRequest - освобождение после использования?
- это будет одна страницы оставаться в браузере, компоненты загрузки программы при необходимости
- история браузера будет, ну, нет.
- страница не будет обновляться на всех
Меня беспокоит то, что я должен делать запросы XMLHttpRequest, так как я в основном C++ программист, преподается, что когда вы пишете заявление, как
x = new XMLHttpRequest();
вам нужно после этого delete
.
Этот вопрос полностью посвящен управлению памятью, остается ли этот объект, выделенный new
, в памяти, даже после того, как он завершает его «цикл» с помощью readyState == 4 или каким-то образом выпущен, освобожден, whatchacallit? Честно говоря, я понятия не имею, в какой момент он может быть освобожден, так как сценарий, создающий их, будет в HEAD и сидит там потенциально весь рабочий день. Будь я должен:
- создать один или несколько, повторно использовать объекты типа XMLHttpRequest, программа приложение так, что не нужно будет больше, чем этот предел,
- или это не имеет значения, и я могу выделить как много новых XMLHttpRequests, как мне нравится?
Пожалуйста, включите в свои ответы, в какой момент и ПОЧЕМУ эти объекты будут удалены, если они вообще будут, учитывая, что «кадр» моей веб-страницы останется. Надеюсь, я сделал этот вопрос ясным и благодарю за любые проницательные ответы.
EDIT:
Рассмотрим код (я удалил много строк, которые были проверкой для неожиданных возвращаемых значений для краткости) из обработчика onClick
событий, который создает XMLHttpRequest и посылает его:
function submitme(){
var p = document.getElementById('p'); //a text field being sent to server
if(typeof p!='undefined' && p!=null){
if(p.value!=""){
//here XMLHttpRequest is created, this function
//returns exactly object of this type or false, when failed
var xhr=createXmlHttpRequestObject();
if(xhr!=false){
xhr.open("POST", "blablabla.php", true);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
//result will be posted in this div below
var adiv = document.getElementById('resultdiv');
//extract the XML retrieved from the server
xmlResponse = xhr.responseXML;
//obtain the document element (the root element) of the XML structure
xmlDocumentElement = xmlResponse.documentElement;
//get the response text
if(typeof adiv !='undefined' && adiv != null){
adiv.innerHTML=xmlDocumentElement.childNodes[0].firstChild.nodeValue;
}
}//end xhr.status
}//end xhr.readyState
};//end xhr.onreadystatechange
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(p.value);
}//end xhr!=false
}//end p.value!=""
}//end typeof p!='undefined'
}//end submitme()
Когда Экземпляр объекта XMLHttpRequest создается, если этот обработчик запущен, он присваивается один раз переменной xhr
, пока обработчик не завершит выполнение. На данный момент есть Сколько ссылок к этому объекту экземпляра? Если я правильно понимаю статьи, связанные с вашими ответами, ответ должен быть none, и браузер просто ждет этого запроса, чтобы он повернул readystate==4
, завершить выполнение onreadystatechange
функция и объект недоступен? Пожалуйста подтвердите.
Не могли бы вы посмотреть мой EDIT и подтвердить, правильно ли я понял? – Kitet
Кажется правильным для меня. Единственная ошибка, которую я могу сказать, заключается в том, что в третьей строке отсутствует ')'. Вы также должны учитывать, что значение 'xhr.status', которое равно' 200 <= x <300' или 'x = 304', также имеет силу. Проверьте это: http://jsfiddle.net/57Pv7/ –
Я принимаю этот ответ, потому что он пришел за 4 секунды до Quentin, хотя они одинаковы;) – Kitet