使用Ajax验证x-editable

时间:2015-04-21 16:01:05

标签: javascript jquery ajax x-editable

我正在使用http://vitalets.github.io/x-editable/并希望使用Ajax验证输入。为了进行测试,我创建了以下脚本https://jsfiddle.net/m698gxgj/1/

我的Ajax请求是异步的,因此验证回调返回我相信undefined,因此它不会导致输入验证失败。

我“可以”将我的Ajax请求更改为同步,但我读到的所有内容(https://stackoverflow.com/a/14220323/1032531)表明这不是一个好主意。

这是如何完成的?

<p>Name</p><a href="javascript:void(0)" id="name"></a>

$('#name').editable({
    type: 'text',
    title: 'Name',
    url: '/echo/json/',
    pk: 123,
    validate: function (value) {
        if (value == 'bob') {
            return 'bob is not allowed';
        } else {
            $.post('/echo/html/', {
                html: 'false',
                delay: .5
            }, function (result) {
                if (result == 'false') {
                    console.log('remote error');
                    return 'remote error';
                }
            });
        }
    }
});

1 个答案:

答案 0 :(得分:5)

validate选项仅用于客户端验证,因此if (value == 'bob')位正常,但您不应在else块中触发ajax帖子。< / p>

您应该使url选项执行ajax发布,然后您可以利用successerror选项正确处理异步回调。

例如:

$('#name').editable({
    type: 'text',
    title: 'Name',
    url: function () {
        return $.post('/echo/json/', {
            json: 'false',
            delay: .5
        });
    },
    pk: 123,
    validate: function (value) {
        if (value == 'bob') {
            return 'bob is not allowed';
        }
    },
    success: function (response) {
        if(response === false) {
            console.log('remote error from success');
            return 'remote error';
        }
    },
    error: function (response) {
        console.log('remote error from fail');
        return 'remote error';
    }
});

的jsfiddle: https://jsfiddle.net/x0bdavn7/