Javascript 使用jquery敲除js检索gravatar

Javascript 使用jquery敲除js检索gravatar,javascript,asp.net-mvc,json,knockout.js,md5,Javascript,Asp.net Mvc,Json,Knockout.js,Md5,我试图让gravatar的多个用途显示在一个页面上,我使用foreach循环。此外,我还使用knockoutjs获取电子邮件和姓名等信息,并以json的形式返回。因为我不能将razor与gravatar一起使用,因为它请求将字符串作为电子邮件传入,而我得到的结果将返回“data bind=“text:email” 我正在尝试使用MD5概念,对此我非常陌生,不确定我是否遵循了正确的步骤。我从google代码在线找到了这一点: 我尝试实现,但不确定我的代码是否正确编写: 我的javascript中与

我试图让gravatar的多个用途显示在一个页面上,我使用foreach循环。此外,我还使用knockoutjs获取电子邮件和姓名等信息,并以json的形式返回。因为我不能将razor与gravatar一起使用,因为它请求将字符串作为电子邮件传入,而我得到的结果将返回“data bind=“text:email”

我正在尝试使用MD5概念,对此我非常陌生,不确定我是否遵循了正确的步骤。我从google代码在线找到了这一点:

我尝试实现,但不确定我的代码是否正确编写:

我的javascript中与我正在做的事情相关的部分:

$.views.Games.UserViewModel = function (data) {
    var self = this;
    self.Name = ko.observable(data.Name);
    self.Email = ko.observable(data.Email);

    self.Hash = CryptoJS.MD5(Email);
};
<img alt="Gravatar" title="My Gravatar" data-bind="attr:{href:'http://www.gravatar.com/avatar/' +Hash()+'?s=30&amp;d=identicon&amp;r=G'}" />
我的查看页面:

$.views.Games.UserViewModel = function (data) {
    var self = this;
    self.Name = ko.observable(data.Name);
    self.Email = ko.observable(data.Email);

    self.Hash = CryptoJS.MD5(Email);
};
<img alt="Gravatar" title="My Gravatar" data-bind="attr:{href:'http://www.gravatar.com/avatar/' +Hash()+'?s=30&amp;d=identicon&amp;r=G'}" />

首先,不要将JS逻辑放入数据绑定中。请改用计算逻辑:

self.GravatarUrl = computed(function() {
    return 'http://www.gravatar.com/avatar/' + self.Hash() + 's=30&amp;d=identicon&amp;r=G';
});
其次,你的
散列值也需要是一个计算的可观察值。按照现在的方式,它只在JS第一次运行时以及最有可能的
Email
为空时计算一次。因此,你的Gravatar URL永远不会被有效的Email散列值填充

self.Hash = computed(function() {
    return CryptoJS.MD5(self.Email);
});
但是,由于此
散列
计算值仅用于服务于此时计算的另一个散列,因此您可以并且可能应该将两者结合起来:

self.GravatarUrl = computed(function() {
    var hash = CryptoJS.MD5(self.Email);
    return 'http://www.gravatar.com/avatar/' + hash + 's=30&amp;d=identicon&amp;r=G';
});
然后,数据绑定变得简单:

<img alt="Gravatar" title="My Gravatar" data-bind="attr:{ href: GravatarUrl }" />
您已经正确地更正了设置img src而不是href的错误(我也没有注意到),但是如果您没有同时执行其他JS逻辑,那么使用括号是不必要的,因此它应该是:


不确定这是否有帮助,但我最近写了一个绑定来实现这一点:


因此,您可以使用敲除绑定功能来使用它。

这看起来很棒!我正在尝试,不确定md5.js是否运行正常,但通过此功能,我得到了一个空的gravatar。我将四处玩,看看我能想出什么。我更新了代码,目前我仍然为所有用户提供了一个图像,而不是一个确定出了什么问题。修复了您的更新,现在我得到了一个空矩形-我不确定
self.Gravatar
中是否有
返回
,但当我添加
返回
时,我得到了所有用户的Gravatar徽标符号。我刚刚意识到显示中返回的图像与中的相同返回的第一部分
http://www.gravatar.com/avatar/
而且在
+
之后它没有接收任何内容。抱歉。忘记了返回。现在已修复。你知道,完全有可能实际上没有一个适合所有用户的图像。他们必须在某个时候给Gravatar一些使用的东西。这不仅仅是魔法。我会的建议手动尝试,看看你是否真的应该首先获得一些其他图像。换句话说,使用其中一个电子邮件地址。在某个地方使用MD5(网上有一些网站可以为你做到这一点),然后自己构建URL,看看会发生什么。如果你仍然得到默认的Gravatar图片,就这样。感谢分享!will def。尝试一下。