1. JavaScript / Говнокод #13531

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    var preg_match = function(pattern, subject) {
        var result;                                     // Result data
        
        var request = $.ajax({                          // Send request
            type:       "POST",
            url:        "/api/regexp.php",
            async:      false,
            // dataType:   "json",
            data:       {p: pattern, s: subject}
        });
    
        request.done(function(data){                    // Case no errors occured
    
            result = data;
    
        });
    
        return (result == 1) ? true : false;
    }

    Валидация полей формы через регулярные вырежения на сервере

    Запостил: lynx1983, 01 Августа 2013

    Комментарии (26) RSS

    • Интересно, как работает async: false?

      И вообще, как это соотносится с первой буквой A в слове AJAX? какие-то взаимоисключающие параграфы.

      И да, автор не знал, что в JS тоже есть регулярки?
      Ответить
      • > async: false
        Угадай с одной попытки.
        Ответить
        • Я понимаю, что он работает синхронно. Вопрос в том, как это реализовано, учитывая, что в JS нет потоков и блокирующих вызовов.
          Ответить
          • Открой jQuery.js и посмотри
            Ответить
            • А jQuery тут ни при чём. Чистый xmlhttprequest так же работает, так что открывать придётся исходники браузеров.
              Ответить
          • Вешает окно на время вызова, если вкратце. Никакие другие скрипты в это время не работают.
            Ответить
            • Фу, блядь. Реально вешает окно, ни по ссылке не щелкнуть, ни текст выделить. Не нужно. Тест здесь http://xmlhttprequest.ru/
              Ответить
              • Проверил. Действительно, в ишаке, в гуглохрени и в пиздолисе всё висит... В IE9 даже страницу скроллить нельзя.

                А в очке (которое на Presto) и текст выделяется, и ссылки кликать можно. Правда, событие клика отправляется в очередь и переход по ссылке происходит после выполнения запроса.
                Ответить
                • > переход по ссылке происходит после выполнения запроса
                  Ну т.е. один хрен неюзабельно. Синхронные запросы такие синхронные :) Зачем их вообще сделали?
                  Ответить
                  • Транзакция. Клик изменяет содержимое сервера, поэтому пока запрос не отработает, кликать ни на что нельзя.
                    И специально для шелдонов: цвет этого комментария должен быть зелёным.
                    Ответить
                    • Синхронизация на клиенте?
                      Ответить
                      • Но ведь если делать синхронизацию на сервере, то сервер будет тормозить и не справится с > 9000 соединений, поэтому надёжнее все ресурсоёмкие операции делать на клиенте.

                        Вот и в Микрософте так считают. У них даже в SMB все проверки на клиенте, а не на сервере.
                        Ответить
                        • Проверки на клиенте - это норм, просто они должны дублироваться на сервере.

                          >синхронизация
                          >по сети
                          >ресурсоёмкие
                          ололо.
                          Ответить
          • >нет <...> блокирующих вызовов
            Есть. Как раз такой вызов мы и наблюдаем.
            Ответить
            • Это заложено в сам объект совершающий запрос: http://xmlhttprequest.ru/
              Ответить
          • Блокирующие вызовы наверняка есть, вот потоков нет, да.
            Ответить
            • Да и потоки можно найти: Web Workers.
              Ответить
      • Может он им не доверял?
        Ответить
    • Зато в случае изменений каждое регулярное выражение редактируется в одном месте.
      Ответить
      • Зато на каждое поле в форме запрос к серверу
        Ответить
        • Ну, с этим я не спорю.
          Кстати, на сервере тоже валидация есть, или автору кода хватило этой? Мол, всё равно ж на сервере уже проверили.
          Ответить
          • После того что выше, как думаете? Нет конечно
            Ответить
      • JS тоже на сервере лежит.
        Ответить
    • RESTfully
      Ответить
    • Зато он может использовать всю мощь lookbehind'ов.
      Ответить

    Добавить комментарий