Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2020, 13:15
Интересующийся
Отправить личное сообщение для spin Посмотреть профиль Найти все сообщения от spin
 
Регистрация: 14.10.2014
Сообщений: 11

Код то работает, то нет - как так ?
есть вот такой код (см ниже)
main висит на кнопке submit

так вот, иногда всё работает как надо,
иногда просто ничего не происходит при нажатии кнопки,
только поля формы очищаются

в логе пусто, никаких ошибок нет
при этом, как назло, если открыта консоль, то практически всегда работает.
а если нет, то не работает минимум в половине случаев.

браузер IE 11

подскажите плиз, в чем может быть дело, куда копать ?

function WriteFile(fileObj) {
  const filePath = "C:\\__WORK\\";
//  const fileName = "doc.txt";

  console.log("write file");

  var fso = new ActiveXObject("Scripting.FileSystemObject");

  var filename = filePath + fileObj.name;

  var FilePointer = fso.OpenTextFile(filename, 8, true);

  FilePointer.Write( fileObj.data );
  FilePointer.Close();

};

function send(filename, docid, keyname, storename) { 
  var url = "http://127.0.0.1/test?"+
              "filename="+encodeURIComponent(filename);
  window.open(url, "_blank");
}

function main() {
  const selectedFile = document.getElementById('inputfile').files[0];

  var writerFunc = WriteFile;
  var sendFunc   = send;

  const reader = new FileReader();

  reader.onload = function() {
    var file = new Object();
    file.name = selectedFile.name;
    file.data = reader.result;
    writerFunc(file);
    sendFunc(file.name);
  };
  reader.readAsArrayBuffer(selectedFile);

};
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2020, 13:42
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,277

Сообщение от spin Посмотреть сообщение
есть вот такой код (см ниже)
main висит на кнопке submit

так вот, иногда всё работает как надо,
иногда просто ничего не происходит при нажатии кнопки,
только поля формы очищаются

в логе пусто, никаких ошибок нет
при этом, как назло, если открыта консоль, то практически всегда работает.
а если нет, то не работает минимум в половине случаев.

браузер IE 11
Понаставьте console.log в разных местах.
Попробуйте понять, что происходит, когда ничего не происходит.
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2020, 16:07
Интересующийся
Отправить личное сообщение для spin Посмотреть профиль Найти все сообщения от spin
 
Регистрация: 14.10.2014
Сообщений: 11

Сообщение от voraa Посмотреть сообщение
Понаставьте console.log в разных местах.
Попробуйте понять, что происходит, когда ничего не происходит.
не срабатывает даже в самом начале

поставил вот так
function main() {
  console.log("main");
//....


в консоли пусто

сам HTML вот

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
    <form onsubmit="main()">
        <div><input type="file" id="inputfile"></div>
        <br/>
        <div>DocId: <input type="text" id="docid" size="100"></div>
        <br/>
        <div><input type="submit" value="Send"></div>
    </form>
    <div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2020, 16:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

spin,
а что это? Ведь такое в веб странице будет работать только с разрешения.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2020, 19:52
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,277

Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла. После этого происходит "отправка" формы. Так как action не указан, то просто происходит перезагрузка страницы.
Нужно ev.preventDefault() или return false в main.
У меня нет ИЕ сейчас, но вот так все работает до new ActiveXObject("Scripting.FileSystemObject");

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
<script>
function WriteFile(fileObj) {
  const filePath = "C:\\__WORK\\";
//  const fileName = "doc.txt";
 
  console.log("write file");
 
  var fso = new ActiveXObject("Scripting.FileSystemObject");
 
  var filename = filePath + fileObj.name;
 
  var FilePointer = fso.OpenTextFile(filename, 8, true);
 
  FilePointer.Write( fileObj.data );
  FilePointer.Close();
 
};
 
function send(filename, docid, keyname, storename) {
  var url = "http://127.0.0.1/test?"+
              "filename="+encodeURIComponent(filename);
  window.open(url, "_blank");
}
 
function main(ev) {
  var selectedFile = document.getElementById('inputfile').files[0];
  var writerFunc = WriteFile;
  var sendFunc   = send;
 
  ev.preventDefault()
  const reader = new FileReader();
 
  reader.onload = function() {
    var file = new Object();
    file.name = selectedFile.name;
    file.data = reader.result;
    writerFunc(file);
    sendFunc(file.name);
  };
  reader.readAsArrayBuffer(selectedFile);
 
};

document.addEventListener('DOMContentLoaded', () => {
	document.querySelector('form').addEventListener('submit', main)
})

</script>
</head>
<body>
    <form>
        <div><input type="file" id="inputfile"></div>
        <br/>
        <div>DocId: <input type="text" id="docid" size="100"></div>
        <br/>
        <div><input type="submit" value="Send"></div>
    </form>
    <div id="result"></div>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2020, 09:56
Интересующийся
Отправить личное сообщение для spin Посмотреть профиль Найти все сообщения от spin
 
Регистрация: 14.10.2014
Сообщений: 11

Сообщение от voraa Посмотреть сообщение
Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла.
не знаю, не знаю....

я же ставил в самом начале main
console.log
и он не отрабатывал

как вы пишите попробовал, тоже не заработало

т.е. до preventDefault просто не доходит

сделал без submit и формы
всё сразу работает с первого раза

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
    <div><input type="file" id="inputfile"></div>
    <br/>
    <div>DocId: <input type="text" id="docid" size="100"></div>
    <br/>
    <button onClick="main()">Send</>
    <div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>


странности какие-то
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2020, 12:39
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,277

Сообщение от spin Посмотреть сообщение
не знаю, не знаю....

я же ставил в самом начале main
console.log
и он не отрабатывал

как вы пишите попробовал, тоже не заработало

т.е. до preventDefault просто не доходит
Я совсем забыл, что в ИЕ нет стрелочных фунций. Давно похоронил его.
Тогда строку 49 в моем коде
document.addEventListener('DOMContentLoaded', () => {

Заменить на
document.addEventListener('DOMContentLoaded', function () {
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает код с последовательностью скобок? AndriiS Общие вопросы Javascript 1 19.02.2019 15:18
Вызов объекта из анонимной функции. Подскажите как работает код. mnzi Events/DOM/Window 9 16.02.2018 10:45
Так как же работает onload? tourniquet Events/DOM/Window 8 25.10.2014 18:31
код работает, а в joomla нет gogas89 Общие вопросы Javascript 18 07.01.2014 22:20
способы организации кода melky Общие вопросы Javascript 17 01.10.2011 21:57