[Closed] [JS] Странное поведение
Однако если после этого
Уверен,что после,а не во время?
Если нажать на вторую картинку до того,как придёт ответ для первой,то отправится второй запрос,а первый больше работать не будет,т.к. нельзя вызывать одновременно больше одного. Поведение как раз похожее
осле,а не во время?Работать он будет, но у него для всех потоков используется переменная ajaisplay, которая при каждом клике переопределяется. Соответственно при клике на верхнюю - пошел запрос для первой строки, тут же кликаешь на вторую - переменная переопределилась и все изменения пишутся во вторую строку.
Если нажать на вторую картинку до того,как придёт ответ для первой,то отправится второй запрос,а первый больше работать не будет,т.к. нельзя вызывать одновременно больше одного. Поведение как раз похожее
Собственно - передавай полностью ссылку на объект при вызове функции, либо создавай новый тип объекта и под каждый вызов делай его экземпляр, тогда переменные пересекаться не будут.
function rep(pid)
{
var ajaisplay = "rep"+(pid.toString;
if(xmlhttp)
{
var queryString = "&pid="+(pid.toString;
document.getElementById(ajaisplay).innerHTML = '<img src="spinner.gif" />';
xmlhttp.open("GET", "test2.php?action=rep"+queryString, true);
xmlhttp.onreadystatechange= function
{
if(xmlhttp.readyState==4)
{
console.log("Rep - div %s: Done", ajaisplay);
document.getElementById(ajaisplay).innerHTML = xmlhttp.responseText;
showrep(pid);
xmlhttp.abort;
//ajaisplay = '';
}
else
{
console.log("Rep - div %s: Wait"+xmlhttp.readyState, ajaisplay);
}
}
xmlhttp.send(null)
}
}
И покажи лог.
если перенести .open после определения коллбека и поставить прямо перед .send, то аномалий не будет.
аномалии так и останутся аномалиями, если автор кода не прочтет, что такое onreadystatechange.
что делать:
1) не писать код, смысл которого не понятен до конца
2) не писать код, как будто это 2005й год
3) читать
, спасибо, теперь работает.
не писать код, как будто это 2005й год?
или вместо console.log("Rep - div %s: Wait", ajaisplay);
воткни alert( 'я сейчас работаю с ' + ajaisplay )
Немного поправил test*.php (поменял выдаваемый текст, иначе браузер не мог дождаться конца ответа - # в HTML есть служебный символ).
Тема закрыта
Оставить комментарий
Bird_V
Пытаюсь побороть странное поведение скрипта. Имеем следующий код:test.html
test2.php
rep.js ->
Что наблюдается: после нажатия на (скажем) верхний воскл. знак всё происходит как положено - меняется содержимое первой строки. Однако если после этого (не перезагружая страницу) нажать на нижний воскл. знак - то поменяется вторая строка, а в первой навеки повиснет индикатор загрузки.
Вопрос: почему так происходит и как этого избежать?
Примечание: в общем случае таких строк может быть и не две, а много