Jquery .svc webservice返回d json对象

Jquery .svc webservice返回d json对象,jquery,web-services,Jquery,Web Services,我正在使用Bootstrapvalidator.com从jquery调用.net svc服务。Im使用远程选项检查用户名是否已被使用,请参见此处: 问题是dat my.svc服务返回bool值,如:{d:true},而bootstrapvalidator需要{valid:true}。我在某个地方读到微软出于安全原因使用d,但我再也找不到这篇文章了 问题是,我能返回{valid:true}还是我的结果总是{d:true}。如果后一种情况是这样的,那么我想尝试使输出像:{d:[valid:true]

我正在使用Bootstrapvalidator.com从jquery调用.net svc服务。Im使用远程选项检查用户名是否已被使用,请参见此处:

问题是dat my.svc服务返回bool值,如:{d:true},而bootstrapvalidator需要{valid:true}。我在某个地方读到微软出于安全原因使用d,但我再也找不到这篇文章了

问题是,我能返回{valid:true}还是我的结果总是{d:true}。如果后一种情况是这样的,那么我想尝试使输出像:{d:[valid:true]},希望bootstrapvalidator能为valid做一个.find,也许这会起作用。但我不知道如何创建这样的输出

功能:

public bool CheckUsername(string userName) {
    try {
        using (var dbC = new DataContext(ConfigurationManager.ConnectionStrings[_environment].ToString())) {
            bool valid = false;
            var check = dbC.UserSelectByUsername(userName).ToList();
            if (check.Count() > 0) {
                return valid;
                }
            else {
                return valid = true;
                }
            }
        }
    catch (Exception exc) {
        Log.Error("Error in .", exc);
        return false;
    }           
}

我认为,如果定义一个具有有效属性的类,并将其设置为true,则可以正确序列化。我认为您当前的问题是直接返回布尔值,而d是因为它不能作为JSON对象返回true

public class X
{
   public bool valid { get; set;}
}
并且做:

public bool CheckUsername(string userName) {
    try {
        using (var dbC = new DataContext(ConfigurationManager.ConnectionStrings[_environment].ToString())) {
            bool valid = false;
            var check = dbC.UserSelectByUsername(userName).ToList();
            if (check.Count() > 0) {
                return new X { valid = valid };
                }
            else {
                return new X { valid = true };
                }
            }
        }
    catch (Exception exc) {
        Log.Error("Error in .", exc);
        return new X { valid = false };
    }           
}

好吧,既然你对其他答案不太满意,我们破解BootStrapValidator怎么样

好吧,不要再黑了,只是扩展一下

在github第59行附近的以太中,您会发现:

xhr.then(function(response) {
                dfd.resolve($field, 'remote', response.valid === true || response.valid === 'true', response.message ? response.message : null);
            });
这可以简单地被覆盖/扩展,您必须通过将整个validate方法更改为以下内容来扩展/覆盖整个validate方法:

xhr.then(function(response) {
                dfd.resolve($field, 'remote', response.d.valid === true || response.d.valid === 'true', response.d.message ? response.d.message : null);
            });
我知道零钱。服务员,我的汤里有一个d

因此,我猜这将实现在包含BootstrapValidator javascript后调用的技巧:

$(document).ready(function () {
    $.fn.bootstrapValidator.validators.remote = $.extend({}, $.fn.bootstrapValidator.validators.remote, {
        validate: function (validator, $field, options) {
            var value = $field.val();
            if (value === '') {
                return true;
            }

            var name = $field.attr('data-bv-field'),
                data = options.data || {},
                url = options.url,
                type = options.type || 'POST';

            // Support dynamic data
            if ('function' === typeof data) {
                data = data.call(this, validator);
            }

            // Support dynamic url
            if ('function' === typeof url) {
                url = url.call(this, validator);
            }

            data[options.name || name] = value;

            var dfd = new $.Deferred();
            var xhr = $.ajax({
                type: type,
                url: url,
                dataType: 'json',
                data: data
            });
            xhr.then(function (response) {
                dfd.resolve($field, 'remote', response.d.valid === true || response.d.valid === 'true', response.d.message ? response.d.message : null);
            });

            dfd.fail(function () {
                xhr.abort();
            });

            return dfd;
        }
    });
});

必须能够返回您自己定义的JSON。我对web服务了解不多,但也许这会有所帮助。呵呵,阅读这篇文章只会证实d不能被删除。这是我的第一个想法,但我认为d的原因是不同的,我只是找不到我找到d原因的文章或线程。很难用谷歌搜索d;-我尝试了你的解决方案,得到了以下结果:{d:{uuuu类型:AjaxService.X:Webservices.Services,valid:true}}这似乎与bootstrapvalidtor组合使用时不起作用,很遗憾,我猜这个问题没有解决方案。服务员,我的汤里有一个d!d用于返回原语和数组,因为直接返回数组可能会受到影响,但我认为它不会用于类。这就成功了。我不是一个真正的球迷,但现在这是最好的方式去。谢谢!!