Nano Hash - криптовалюты, майнинг, программирование

Функция обратного вызова (успеха?) для AJAX

Когда пользователь вводит свою информацию на странице регистрации и нажимает «отправить», вызывается usernameCheck(). Теоретически он должен отправить запрос AJAX на сервер, который проверяет, занято ли имя пользователя. Если это так, то пользователь получает предупреждение, и больше ничего не происходит. В противном случае он проверяет правильность пароля. В предыдущем вопросе мне сказали, что мне нужна функция обратного вызова, чтобы остановить отправку формы до того, как AJAX вернется асинхронно. Вместо этого я помещаю форму отправки в часть success: запроса AJAX, поэтому она должна вызываться только в том случае, если имя пользователя уникально и пароль действителен.

Однако, похоже, он никогда не доходит до фазы проверки пароля или не отображает никаких предупреждений...

function usernameCheck(){ //returns true if username is free
    var ajaxHeaders = {}; //create header object
    ajaxHeaders["X-CSRFToken"] = getCookie('csrftoken'); //add csrftoken from cookies for authentication server-side
    $.ajax({
        type:'POST',
        url:"http://omnicloud.me/signup", 
      data:{username: $("#username").val()}, 
      success:function(response){
        if(response=="true"){
           $('#passAlert').innerHTML("Sorry, that username is already taken") 
           //passalert is where all of the errors (username taken, invalid password) show up
        } else {
            if (passwordCheck()){
                $('#signup_form').submit();
            }
        }
        },
    headers: ajaxHeaders //settings for ajax request
    });

    return !($('#passAlert').value == "Sorry, that username is already taken")
}

function passwordCheck(){
    var pattern =  /[a-z,A-Z,0-9,$,#,@,!,&,%,+,_,-,?]{10,}/  //regexp for valid charachers
    var text = document.getElementById('password').value;
    var msg = document.getElementById('passAlert');
    if(text.length < 10){
        msg.innerHTML = "Passwords need to be at least 10 characters long :(";
        return false;
    } else if (!text.match(pattern)){
        msg.innerHTML = "You have entered an invalid digit (sorry)";
        return false;
    } else if (unacceptable(text)){
        msg.innerHTML = "You can be more creative than that...";
        return false;
    } else if(text != document.getElementById('pass_repeat').value){
        msg.innerHTML = "Your passwords do not match.";
        return false;
    }
    return true;
}

function unacceptable(pwd){ //joins the array, if it matches any one of them 
                                                        //(g means at any point, i means case insensitive) password rejected
    var re = new RegExp(unforgivable.join("|"),"gi");
    return (pwd.toString().match(re) != null);
}

Вид регистрации Джанго:

def signup(request):
if request.method == 'GET':
    return render_to_response('signup.html', context_instance=RequestContext(request))
elif request.is_ajax(): 
#query db for user with username provided via ajax, return if it exists
    try:    
        user = User.objects.get(username=request.POST.get("username")) 
    except User.DoesNotExist:
        return HttpResponse("false",context_instance=RequestContext(request))
    else:
        return HttpResponse("true", context_instance=RequestContext(request))

  • откройте инструменты браузера (F12) и проверьте, не отправляется ли что-нибудь. 06.12.2011
  • попробуйте оповещение (ответ); внутри функции успеха и проверьте ее значение 06.12.2011
  • @mithunsatheesh, о, оповещения не появляются. Вы видите что-нибудь, что может привести к тому, что это не скомпилируется? Я также включил представление Django, хотя оно кажется достаточно простым и не должно давать сбоев. 07.12.2011

Ответы:


1

Тот факт, что вы упоминаете полное доменное имя;

http://omnicloud.me/signup

предположите мне, что вы звоните на сервер из домена, который отличается от того, где вы загружаете страницу, и что вы сталкиваетесь с ограничениями браузера для перекрестного доменного имени. Междоменный доступ возможен, но требует дополнительной настройки — сначала попробуйте заставить его работать, используя тот же домен, с которого вы загружаете страницу,

т.е. использовать

   /signup

на том же сервере, а не использовать часть http://omni.....

06.12.2011
  • О нет, URL-адрес страницы регистрации такой, поэтому, если это получение, Django отображает и возвращает страницу регистрации. Если это запрос AJAX, то он выполняет всю работу с базой данных. 06.12.2011
  • Я добавил представление Django для регистрации. Это то, что вы имели в виду? 07.12.2011
  • Под перекрестным доменом я имел в виду, что ваш HTML и Jquery JS публикуется с одного доменного имени, и что вызов AJAX обращается к странице регистрации в другом домене (например, omnicloud.me) — современные браузеры по умолчанию предотвращают запросы Ajax. перейти на сервер, отличный от того, с которого пришел HTML. 07.12.2011
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..