How to return a closure method out of scope when there is ajax response

Asked

Viewed 32 times

1

I did the following method using the library xeditable:

$('[data-id]').on('click',function(e) {

        e.stopPropagation();
        var _self = $(this);
        var id = _self.data('id');
        var editableElement = $('.item_editable_'+id+'.editable');
        editableElement.editable('toggleDisabled');
        var classe='';
        if (!editableElement.hasClass('editable-disabled')) {
            classe = 'active';
        }
        $(this).attr('class', classe);

   $('#username_'+id).editable({
                    url: 'api/salvar-usuario',
                    pk: {
                        id: id,
                        csrf_token: csrf,
                        type: 'username'
                    },
                    validate:function(value){
                        if ($.trim(value) == '' || $.trim(value).length < 4 ) {
                            return 'Preencha um nome de usuário de até no mínimo 4 caracteres.';
                        }
                        var expSpace = /\s/g;
                        if ($.trim(value).match(expSpace)) {
                            return 'O nome de usuário não pode conter espaços';
                        }
                        var exp = /^[a-zA-Z0-9_]{4,150}/g;
                        if (!exp.exec($.trim(value))) {
                            return 'Preencha um nome de usuário válido de até 4 caracteres.';
                        }
                        var verifyUser;
                        var checkU = false;
                        verifyUserExist($.trim(value), function(data) {
                            verifyUser = data;
                            checkU = true;
                        });
                        console.log(verifyUser)
                        if (verifyUser && checkU) {
                            return 'Este nome de usuário está em uso.';
                        }

                    },
                    success: function (response, newValue) {
                        //console.log(newValue);
                        if (response.status != '1') {
                            $('#error_display').removeClass('hidden')
                                .html(layoutErrors(response));
                        } else {
                            $('#error_display').addClass('hidden')
                        }
                    }
                });

    });

I have a verification method that is returning true or false:

function verifyUserExist(username, callback) {
     var urlVerify =  "api/verify-user";
         return $.ajax({
                url: urlVerify,
                type: "POST",
                dataType: 'json',
                data: {
                    usuario: username,
                    csrf_token: csrf
                }
         }).done(function (data) {
             callback(data.existUser);
         });
}

The problem occurs that I am not able to return within the validate of xeditable. For it is a function closure, how can I do to send out this validation?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.