LINUX.ORG.RU

Повторное нажатие кнопки в форме редактирования коммента

 


0

1

Раньше работало, теперь нет. Пример: я отредактировал комментарий, жму кнопку, он начинает отправляться, и тут я замечаю опечатку. Нажимаю esc (отмена текущего запроса), исправляю её, жму кнопку опять. Некоторое время назад это перестало работать (кнопка отправки второй раз не нажимается). Зачем там вообще какая-то спец. логика? Это же обычная post-форма. А с этим нововведением приходится нажимать f5 чтобы перезагрузить форму редактирования, что при плохом инете может занять весьма некомфортное время.

★★★★★

он начинает отправляться

Он мгновенно отправляется. Как ты там успеваешь прожать esc?

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

У тебя мгновенно, у меня же от 3 до 10 секунд (а иногда и больше), в зависимости от текущего качества связи. Вот это сообщение отправлялось 6 секунд. Точнее, отправляется то оно наверно быстрее, но потом грузится страница куда оно написано - это уже больше, и если её отменить - остаёшься на странице редактирования.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)

а esc реально отменяет отправку? Так можно и дубликат сделать

mittorn ★★★★★
()
Ответ на: комментарий от firkax

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

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от mittorn

Я про редактирование и пишу.

Хотя с новыми комментами так тоже можно делать, если предварительно проверить что запрос ещё не отправился на сервер (по дашборду локального прокси), и отменить его в проксе а не в браузере, но это уже если совсем плохая связь и отправка по 30+ секунд длится.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

что вы такое делаете с сетью, что отправка так долго длится? У меня через iodine лор быстрее работает...

mittorn ★★★★★
()
Ответ на: комментарий от gagarin0

router с самописным IP стеком

Не просто с самописным IP стеком, а с самописным IP стеком на Турбо-Паскале (link).

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

выглядит это примерно так

program ParsePacket;

uses
  Crt;

type
  // IPv4 заголовок
  TIPHeader = packed record
    VerLen: Byte;        // версия (4 бита) + IHL (4 бита)
    TOS: Byte;
    TotalLen: Word;
    ID: Word;
    FlagsOff: Word;      // флаги (3 бита) + смещение фрагмента (13 бит)
    TTL: Byte;
    Protocol: Byte;
    Checksum: Word;
    SrcIP: LongInt;
    DstIP: LongInt;
  end;

  // TCP заголовок
  TTCPHeader = packed record
    SrcPort: Word;
    DstPort: Word;
    SeqNum: LongInt;
    AckNum: LongInt;
    DataOffFlags: Word;  // смещение данных (4 бита) + резерв (3) + флаги (9)
    Window: Word;
    Checksum: Word;
    Urgent: Word;
  end;

var
  Packet: array[1..60] of Byte; // буфер для пакета, достаточно для IP (20 байт) + TCP (20 байт)
  IP: TIPHeader absolute Packet; // накладываем на начало буфера
  TCP: TTCPHeader absolute Packet[21]; // накладываем после IP (если IHL=5, т.е. 20 байт)
  i: Integer;
  IPLen, TCPLen: Integer;

  // функции для преобразования порядка байт
  function ntohs(Value: Word): Word; inline;
  begin
    ntohs := Swap(Value);
  end;

  function ntohl(Value: LongInt): LongInt; inline;
  var
    b: array[1..4] of Byte absolute Value;
  begin
    ntohl := (b[1] shl 24) or (b[2] shl 16) or (b[3] shl 8) or b[4];
  end;

  // функция для вывода IP-адреса
  procedure PrintIP(IP: LongInt);
  var
    b: array[1..4] of Byte absolute IP;
  begin
    Write(Ord(b[1]), '.', Ord(b[2]), '.', Ord(b[3]), '.', Ord(b[4]));
  end;

begin
  ClrScr;
  // Заполним тестовый пакет (заголовки в сетевом порядке big-endian)
  // IP-заголовок: версия 4, IHL=5 (20 байт), TOS=0, TotalLen=40 (0x0028),
  // ID=0x1234, Flags+Offset=0x4000 (не фрагментирован), TTL=64, Protocol=6 (TCP),
  // Checksum=0x0000 (для примера), SrcIP=192.168.1.1 (C0 A8 01 01),
  // DstIP=192.168.1.2 (C0 A8 01 02)
  Packet[1] := $45; // 0x45 = версия 4, IHL=5
  Packet[2] := $00;
  Packet[3] := $00; Packet[4] := $28; // TotalLen = 0x0028 -> 40
  Packet[5] := $12; Packet[6] := $34; // ID
  Packet[7] := $40; Packet[8] := $00; // Flags+Offset: 0x4000 (DF flag)
  Packet[9] := $40; // TTL=64
  Packet[10] := $06; // Protocol=6 (TCP)
  Packet[11] := $00; Packet[12] := $00; // Checksum (0)
  Packet[13] := $C0; Packet[14] := $A8; Packet[15] := $01; Packet[16] := $01; // Src
  Packet[17] := $C0; Packet[18] := $A8; Packet[19] := $01; Packet[20] := $02; // Dst

  // TCP-заголовок: SrcPort=12345 (0x3039), DstPort=80 (0x0050),
  // Seq=0x01020304, Ack=0x05060708, DataOff=5 (20 байт), флаги SYN,
  // Window=0xFFFF, Checksum=0x0000, Urgent=0
  Packet[21] := $30; Packet[22] := $39; // SrcPort
  Packet[23] := $00; Packet[24] := $50; // DstPort
  Packet[25] := $01; Packet[26] := $02; Packet[27] := $03; Packet[28] := $04; // Seq
  Packet[29] := $05; Packet[30] := $06; Packet[31] := $07; Packet[32] := $08; // Ack
  Packet[33] := $50; Packet[34] := $02; // DataOff=5 (0x50), флаги: SYN=0x02 (в младшем байте)
  Packet[35] := $FF; Packet[36] := $FF; // Window
  Packet[37] := $00; Packet[38] := $00; // Checksum
  Packet[39] := $00; Packet[40] := $00; // Urgent

  // Теперь разберем заголовки с учетом сетевого порядка
  writeln('IPv4 Header:');
  writeln('  Version: ', (IP.VerLen shr 4));
  writeln('  IHL: ', (IP.VerLen and $0F));
  IPLen := (IP.VerLen and $0F) * 4; // длина в байтах
  writeln('  Header Length: ', IPLen, ' bytes');
  writeln('  TOS: ', IP.TOS);
  writeln('  Total Length: ', ntohs(IP.TotalLen));
  writeln('  ID: ', ntohs(IP.ID));
  writeln('  Flags: ', (ntohs(IP.FlagsOff) shr 13) and $07);
  writeln('  Fragment Offset: ', (ntohs(IP.FlagsOff) and $1FFF));
  writeln('  TTL: ', IP.TTL);
  writeln('  Protocol: ', IP.Protocol);
  // Checksum пропускаем
  write('  Source IP: '); PrintIP(ntohl(IP.SrcIP)); writeln;
  write('  Destination IP: '); PrintIP(ntohl(IP.DstIP)); writeln;

  writeln;
  writeln('TCP Header:');
  writeln('  Source Port: ', ntohs(TCP.SrcPort));
  writeln('  Destination Port: ', ntohs(TCP.DstPort));
  writeln('  Sequence Number: ', ntohl(TCP.SeqNum));
  writeln('  Acknowledgment Number: ', ntohl(TCP.AckNum));
  writeln('  Data Offset: ', (ntohs(TCP.DataOffFlags) shr 12) and $0F);
  TCPLen := ((ntohs(TCP.DataOffFlags) shr 12) and $0F) * 4;
  writeln('  TCP Header Length: ', TCPLen, ' bytes');
  writeln('  Flags:');
  writeln('    FIN: ', (ntohs(TCP.DataOffFlags) and $01));
  writeln('    SYN: ', (ntohs(TCP.DataOffFlags) and $02) shr 1);
  writeln('    RST: ', (ntohs(TCP.DataOffFlags) and $04) shr 2);
  writeln('    PSH: ', (ntohs(TCP.DataOffFlags) and $08) shr 3);
  writeln('    ACK: ', (ntohs(TCP.DataOffFlags) and $10) shr 4);
  writeln('    URG: ', (ntohs(TCP.DataOffFlags) and $20) shr 5);
  writeln('    ECE: ', (ntohs(TCP.DataOffFlags) and $40) shr 6);
  writeln('    CWR: ', (ntohs(TCP.DataOffFlags) and $80) shr 7);
  writeln('    NS: ', (ntohs(TCP.DataOffFlags) and $100) shr 8);
  writeln('  Window: ', ntohs(TCP.Window));
  writeln('  Checksum: ', ntohs(TCP.Checksum));
  writeln('  Urgent Pointer: ', ntohs(TCP.Urgent));

  ReadKey;
end.
gagarin0
()
Ответ на: комментарий от gagarin0

Невероятным образом ИИ смог выставить ситуацию в гораздо более худшем свете, чем она есть.
Ц — Успех.

i-rinat ★★★★★
()
Ответ на: комментарий от gagarin0

Плохая сеть не там, если что.

firkax ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.