Как бороться с комментариями и капчей jquery ajax - PullRequest
4 голосов
/ 11 августа 2009

Я работаю над системой комментариев в социальной сети, я использую jquery, я могу без проблем публиковать комментарии с помощью ajax, но иногда мне нужно, чтобы пользователь отправил форму с картинкой, если они публикуют слишком много комментариев или другие причины.

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

Это несколько сложно для меня, но я думаю, что большую часть этого я уже сделал, может быть, вы можете прочитать мои комментарии ниже и помочь мне с капчей, главным образом о том, как я могу вызвать диалог, чтобы открыть, как я могу передать значение / текст комментария через капчу и обратно к комментарию, снова возвращаемому при успехе, а также, если пользователь неправильно введет капчу, он перезагрузит капчу

$.ajax({
    type: "POST",
    url: "processing/ajax/commentprocess.php?user=",
    data: args,
    cache: false,
    success: function (resp) {
        if (resp == 'captcha') {
            //they are mass posting so we need to give them the captcha form
            // maybe we can open it in some kind of dialog like facebox
            // have to figure out how I can pass the comment and user data to the captcha script and then post it
        } else if (resp == 'error') {
            // there was some sort of error so we will just show an error message in a DIV
        } else {
            // success append the comment to the page
        };
    }
});

Ответы [ 2 ]

5 голосов
/ 11 августа 2009

Думаю, я бы выбрал модальное диалоговое окно , которое поставляется с библиотекой jQuery UI . Затем я бы обернул вызов AJAX в функцию, чтобы я мог рекурсивно вызывать его. Я хотел бы создать DIV (#captchaDialog), который обрабатывает отображение изображения Captcha и вход (#captchaInput) для ввода ответа. Когда пользователь нажимает кнопку «ОК» в модальном диалоговом окне, я изменяю исходные аргументы новым откликом капчи и вызываю функцию. Поскольку это решение просто изменяет исходные аргументы и передает его на тот же URL-адрес, я считаю, что это решение будет работать для вас.

Пример кода, за исключением div и ввода для модального диалога:

var postComment = function(args) {
    $.ajax({
        type: "POST",
        url: "processing/ajax/commentprocess.php?user=",
        data: args,
        cache: false,
        success: function (resp) {
            if (resp == 'captcha') {
                $("#captchaDialog").dialog({
                    bgiframe: true,
                    height: 140,
                    modal: true,
                    buttons: {
                     ok: function() {
                        args.captchaResponse = $(this).find("#captchaInput").val();
                        postComment(args);
                     }
                    }
                });
            } else if (resp == 'error') {
                // there was some sort of error so we will just show an error message in a DIV
            } else {
                // success append the comment to the page
            };
        }
    });
};

Надеюсь, это поможет!

0 голосов
/ 11 августа 2009

Побочные мысли:

Для лучшего пользовательского опыта я настоятельно рекомендую использовать обратную CAPTCHA:

http://www.ccs.uottawa.ca/webmaster/reverse-captcha.html

Я понимаю, что это не отвечает потребностям вашего вопроса, но я должен был хотя бы упомянуть об этом. Это метод предотвращения спама, который не требует никаких действий от имени ваших пользователей.

...