livevalidation.js пользовательская функция проверки имени пользователя - PullRequest
0 голосов
/ 05 августа 2011

Я уверен, что это, вероятно, что-то простое, что я не делаю.Запуск плагина jquery livevalidation.js (livevalidation.com).Это обеспечивает пользовательские функции обратного вызова.Я пытаюсь проверить доступность имени пользователя.На стороне сервера работает нормально, и я получаю правильные ответы обратно в моей переменной данных ...

Вот мой JS:

Validate.Username = function(value, paramsObj) {
    var paramsObj = paramsObj || {};
    var message = paramsObj.failureMessage || "Username is not available";
    var isSuccess = true;

    $.post("<?php echo fURL::getDomain(); ?>/ajax/username", 
        function(data) {
            if (data.status === 'notavailable')
            {
            Validation.fail('oops, not available.');
            }               
            });
};

Я звоню, используя:

var username = new LiveValidation('username', { validMessage: curr_username + "is available!" });
username.add( Validate.Presence, { failureMessage: "Choose a username" });
username.add( Validate.Username, { failureMessage: "Username is not available." } );

Проблема, которую я получаю:

Uncaught ReferenceError: Validation is not defined

Если я поставлю Validation.fail() вне моей функции .post(), она будет работать нормально.Так что я уверен, что это потому, что на нее нельзя ссылаться внутри функции .post().

Я пытался использовать функцию обратного вызова

if (data.status === 'notavailable')
{
    status_not_available();
}

Я получаю ту же ошибку.

Я понимаю, что это, вероятно, очень просто, но любая помощь будет признательна.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 августа 2011

У меня та же проблема.Я нашел следующее, http://forum.jquery.com/topic/ajax-return-value-on-success-or-error-with-livevalidation, но не смог заставить его работать.НО ДА!В этот самый момент я сделал сом (дерьмовый) аддон javascript, который заставил его вести себя, я думаю:)

Это то, что я использую.


        function check_avail(name, id, postUrl)
    {
       var dataVal = name+'='+$(id).val();
       var isaccepted = ''
       $(id).next('div').remove();

       $(id).after("<p>Undersøger om "+name+" er ledigt</p>");

       $.ajax({
          url: postUrl,
          cache: false,
          type: 'post',
          dataType: 'json',
          data: dataVal,
          async:  false,
          success: function(data) {
             if( data.success == 'true' )
             {
                $('#'+name+'-availability').remove();
                //return false;
           isaccepted = false;
             }

             if( data.success == 'false' )
             {
                $('#'+name+'-availability').remove();
    //            name.destroy();
            isaccepted = true;
             }
          }

       });

    if (isaccepted == false) {
    return false;   
    } else{
    return true
    };

    }

И


    f1.add( Validate.Custom, { against: function() {
     return check_avail( 'brugernavn', '#ft001', 'usernamecheck.asp' ); 
    }, failureMessage: 'Brugernavnet er optaget' } );

Надеюсь, это поможет вам :) Запрос json, о котором вы можете прочитать по ссылке в начале :) (Я не очень разбираюсь в javascript, и решение "isaccepted" может быть, вероятно, намного лучше)

0 голосов
/ 05 августа 2011

попробуйте изменить его с Validation.fail на Validate.fail

попробуйте обернуть его в другую функцию и попытаться поместить функцию validateStatus (status) как внутри, так и вне функции Validate.Username. Пример ниже находится внутри

Validate.Username = function(value, paramsObj) {
var paramsObj = paramsObj || {};
var message = paramsObj.failureMessage || "Username is not available";
var isSuccess = true;

$.post("<?php echo fURL::getDomain(); ?>/ajax/username", 
    function(data) {
          validateStatus(data.status);      
        });

function validateStatus(status){
     if (status === 'notavailable'){
           Validate.fail("not available");
      }
}

};
...