Перейти к публикации

Без вызова Alert("текст") не применяется значение.


Рекомендованные сообщения

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

Так вот по открытию одной из них считываются имена файлов, расположенных на устройстве. Они и считываются.

   function GetList(submit) {
	    var server = "/list?dir=/";
        send_request(submit, server);
        alert("блаблабла");
        alert('2' + submit.value);
    }
  
function send_request(submit,server){
    var request = new XMLHttpRequest();
    request.open("GET", server, true);
    request.send();
    save_status(submit,request);
    //alert('1' + submit.value);
   }
   
   function save_status(submit,request){
    var new_submit;
    var old_submit = submit.value;
    request.onreadystatechange = function() {
     if (request.readyState != 4) return;
     submit.value = request.responseText;
     new_submit = request.responseText;
     setTimeout(function(){
      submit.value=old_submit;
      submit_disabled(false);
     }, 1000);
    }
    submit.value = 'Подождите...';
    submit.value = new_submit;
    submit_disabled(true);
}
   
   function submit_disabled(request){
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
     if (inputs[i].type === 'submit') {inputs[i].disabled = request;}
    }
   }

Первая функция отправляет запрос на устройство. Устройство считывает список файлов и возвращает в виде массива типа

[{"type":"dir","name":"first"},{"type":"file","name":"second"}]

Но вот если в первой функции убрать всплывающее окошко по алерту с блаблабла, то alert('2' + submit.value); выдает "2undefined". Можно конечно вместо блаблабла написать вумную фразу, типа "Данные собираются". Но как-то это неправильно. Подскажите, что сделать, чтобы без этого окна применялось значение. Я всю голову сломал. Тут что-то с последовательностью действий. Например вот если я вставлю в какую нибудь функцию send_request тоже какой-нибудь алерт, то алерт из первой функции выскакивает первый! В других языках программирования тот алерт, что в вызываемой йункции первым бы отработал. А тут такая фигня. Не могу понять этого!

Ссылка на сообщение
Поделиться на других сайтах
  • klierik изменил заголовок на Без вызова Alert("текст") не применяется значение.

Async + await. 

Нужно ждать, когда request обработается, а только потом что-то делать с value. Какая-то микросекунда буксует.

Также state для submit не хорошие.

Изменено пользователем Full-R
Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Delphin911 сказал:

Это я понял. А что делать то?

Не хочу ваш устаревший XHR переделывать. Вот тут посмотрите: Не срабатывает цикл for - ECMAScript - Учим делать сайты. HTML форум. (htmlforum.io).

Alert не делайте. Есть console.log и promt. 

Ссылка на сообщение
Поделиться на других сайтах

console.log не помогает. Попробовал сейчас после вашего совета. Оно даже в консоль не выводится.

function SaveConfig(submit) {
	var server = "/saveSettings?ssid=" + val('ssid') + "&password=" + encodeURIComponent(val('password')) + "&passwordAP=" + encodeURIComponent(val('passwordAP')) + "&ssidAP=" + val('ssidAP') + "&SSDP=" + val('SSDP') + "&IPAP=" + val('IPAP');
    send_request(submit,server);
    console.log("Изменения сохранены.");
	location.reload();
}

Вот у меня вместо console.log был alert и все срабатывало. А тут видно перезагрузка срабатывает раньше и не дает сохраниться и в лог консоли отправить.

Ссылка на сообщение
Поделиться на других сайтах

К стати если на компе во всех броузерах работает, то на смартфоне почему-то эта динамически строящаяся таблица не отрисовывается! В чем может быть дело?

Продолжаю бороться с задержкой при выводе результата и начинаю думать, что дело не в ней. Вот что написал почитав просторы инета:

unction GetList(submit) {
    	        var fl;
                var server = "/list?dir=/";
                send_request(submit, server);
                //alert("Считываем список файлов...");
                //fl = submit.value;
                //if (fl.length) {return fl;}
                //else {console.log("wait...");setTimeout(GetList, 500);}
                sleep(5000);
                return submit.value;
            }

            function sleep(milliseconds) {
                const date = Date.now();
                let currentDate = null;
                do {
                    currentDate = Date.now();
                } while (currentDate - date < milliseconds);
            }

Да, реально проходит 5 секунд ожидания, но на выходе пусто. Вот там еще закомментированные строки, тоже не работают. Толко alert спасает ситуацию.

Ну и к стати мне кажется, что на смартфоне и alert не помогает. Пустая страница.

Ссылка на сообщение
Поделиться на других сайтах

почитайте https://learn.javascript.ru/xmlhttprequest
там есть примеры которые вам должны помочь

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Статистика пользователей

    47 305
    Всего пользователей
    1 451
    Рекорд онлайна
    kenwood
    Новый пользователь
    kenwood
    Регистрация
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...