Задать вопрос
Ответы пользователя по тегу JavaScript
  • В FireFox не работает input type=«radio» при добавлении его на страницу при помощи .append()

    merlin-vrn
    @merlin-vrn
    jsfiddle.net/evK2H/ заменил ваш label на div — заработало в Fx. Ну label тут действительно был не очень уместен.
    Ещё советую цеплять событие так, как сделано в фиддле, а не прописывать в onchange.
    Ответ написан
    1 комментарий
  • Поиск пользователей в БД, как эффективнее?

    merlin-vrn
    @merlin-vrn
    Так готовые решения есть. Мы пробовали, работает на базе из как раз нескольких тысяч наименований (hardworm поправит меня, если я ошибаюсь). Использовали мы Ajax Autocomplete for jQuery.

    Что касается запроса к таблице из ~5000 наименований — так то ни для какой базы не работа, при условии, что по соответствующему полю есть индекс.
    Ответ написан
  • CORS + Basic Authentication не работает в большинстве браузеров

    merlin-vrn
    @merlin-vrn
    В общем, я склонен считать, что это баг в jQuery. Я написал код для CORS с Basic Auth «руками» без jQuery, он работает как минимум в Fx 10 и 17 и в Opera 12.10

    Код следующий:
    на клиенте —

    <!DOCTYPE html>
    <html><head>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>CORS testing</title>
    <script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function() {
        document.getElementById("1").addEventListener("click", function() {
            var xhr = new XMLHttpRequest();
            xhr.onload = function(e) {
                document.getElementById("2").textContent = xhr.responseText;
            };
            xhr.open("GET", "http://dev.merlin-vrn.tk/cors/api.php", true);
    
    //        xhr.withCredentials = true;
            xhr.setRequestHeader("Authorization", "Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk");
    
            xhr.send();
        }, false);
    }, false);
    </script>
    
    </head><body>
    
    <button id="1">Click me</button>
    <div id="2"></div>
    
    </body></html>
    
    


    на севрере —
    <?php
    
    if (isset($_SERVER['HTTP_ORIGIN']))
        header("Access-Control-Allow-Origin: $_SERVER[HTTP_ORIGIN]");
    
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {                                                                                                                        
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))                                                                                                        
            header("Access-Control-Allow-Methods: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_METHOD]");                                                                         
                                                                                                                                                                          
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))                                                                                                       
            header("Access-Control-Allow-Headers: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_HEADERS]");                                                                        
    } else {                                                                                                                                                              
        header('WWW-Authenticate: Basic realm="API"');                                                                                                                    
    
        header("Content-Type: application/json");
    
        if (isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == "testuser" && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == "testpassword") {
            header('HTTP/1.1 200 OK');
            echo '{"result": "ok"}';
        } else {
            echo '{"result": "noauth"}';
        }
    }
    
    file_put_contents("api-log.txt", "$_SERVER[REQUEST_METHOD] $_SERVER[REQUEST_URI] $_SERVER[SERVER_PROTOCOL]\n", FILE_APPEND);
    file_put_contents("api-log.txt", print_r($GLOBALS, true), FILE_APPEND);
    file_put_contents("api-log.txt", "\n\n", FILE_APPEND);
    
    ?>
    
    


    Логирование в конце этого скрипта — просто для удобства при тестировании. Живьём можно видеть здесь.

    P.S. господа, подскажите хайлайтер для хабра, а?
    Ответ написан
    3 комментария
  • Best practices при обработке серверных ошибок при Ajax запросе?

    merlin-vrn
    @merlin-vrn
    А это зависит от того, что вообще делалось.

    Если вы отправляли почту через ajax, нужно честно сказать, что при отправке почты произошла ошибка. Пусть это будет не alert, но заметный div с сообщением нужен.
    А если это было просто обновление списка комментариев к записи в фоновом режиме, то лучше всего промолчать, либо просто перезагрузить страницу без ajax.

    Самое общее правило, какое я могу сформулировать: если ошибка произошла в ответ на явное действие пользователя, нужно сообщить, иначе — если это неважно для общего функционала сайта, желательно обработать по-тихому. Но вообще важен контекст. Нет общего способа сообщения о любых ошибках в любых ситуациях.
    Ответ написан
    Комментировать