我应该是一个功能正常的脚本,努力根据它们的值推送评级,即1/5,2/5,3/5等.但是脚本根本不与firebase通信.我的Javascript是否有问题,这会阻止输入的值,按照指示发送到firebase?这是所有必要的代码.此外,还有一个指向文档头部的firebase.js的链接.
(function() {
var firebaseUrl = "https://myFirebase.firebaseIO.com/rating";
var itemId = (rootRef).child;
var rootRef = new Firebase(firebaseUrl); // Reference the Firebase location
var itemRef = rootRef.child("items").child(itemId); //Define itemRef as the variable for itemId in firebase
var star = $('.rating');
var numRatings;
star.click(function() { //Watch out for rating1 inside of the website and grab its value. i.e. 1, 2, 3, 4, or 5
itemRef.child("ratings").child("numRatings").set(star.val()); //Set ratings inside of Firebase with values such as 1, 2, 3, 4, and 5, under items such as item1, item2, item3, etc...
});
var cumulativeRating;
var averageRating;
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
});
})();
Rated 4/5 by 103 users
Frank van Pu..
5
你的代码中有很多小错误.我将带您了解其中的一些.但是,不要只是,请花点时间了解我实际上是如何解决这些问题的.您的第一个目标应该是能够调试自己的代码以摆脱这些更简单的错误.
好的,我会写两个问题.可能会有更多,但这已经需要足够的时间.
处理Firebase中还没有数据的情况
获取单击的单选按钮的值
处理Firebase中还没有数据的情况
将代码粘贴到jsbin中时发生的第一件事是它将它记录到devtools中的Javascript控制台(你得到这些F12并且在开发时应始终保持它们打开):
未捕获的TypeError:无法读取null的属性'numRatings'
这是现代Javascript的空指针异常版本,是因为你.numRatings
对某些东西做了null
或者undefined
.幸运的是,你只有.numRatings
一个地方:
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
});
因此它看起来ratingsData
没有价值,这确实是在项目获得评级时第一次发生.在这种情况下,Firebase将value
使用null
(或undefined
)触发事件.
处理它很容易:
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
if (ratingsData) {
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
}
});
在实际的实现,你可能会想一个补充else
到if
,并表明没有/没有足够的收视率呢.
获取单击的单选按钮的值
您将点击的值传递给Firebase的代码段是:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set(star.val());
});
我做的第一件事是在那里添加一个日志记录语句,看看点击是否到达代码:
var star = $('.rating');
star.click(function() {
console.log('click');
itemRef.child("ratings").child("numRatings").set(star.val());
});
当我现在单击单选按钮时,它会记录click
.所以看起来这是正确连接的.我经常会把一个Javascript debugger
语句而不是console.log
下一步,但这一次决定反对.
我做的下一个技巧是设置一个简单的Firebase记录器,以显示更改是否通过Firebase:
new Firebase('https://you.firebaseIO.com/rating').on('value', function(s) { console.log(JSON.stringify(s.val())); })
您可以将其添加到脚本的顶级位置.我经常将它添加到Chrome的devtools控制台.每次Firebase的值发生变化时,都会记录下面的内容:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
或者它应该做什么,但在原始脚本中它从未这样做.所以我们进入了点击处理程序,但是这个值没有进入Firebase.
仔细检查发现了一些奇怪的东西:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set(star.val());
});
您可以使用star
此代码段第一行中的变量指向所有评级元素.但是在你执行的click处理程序中star.val()
,这意味着你希望它引用一个rating元素:被点击的元素.
这里有一个关于变量名称的快速说明:通过star
对包含所有评级元素的变量使用单数来设置自己的错误.我将该变量命名为stars
,以表明它包含多个星星.那样你在打字时就会更容易看到有些东西闻起来stars.val()
.
我不是jQuery专家,但jQuery的click方法文档的快速Google 似乎表明你可以访问被点击的元素this
.所以代码片段必须是:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set($this).val());
});
有了它,我的Firebase JSON记录器开始喷出数据:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
这些值现在可以用于Firebase了!
从问题中消除技术
请注意,最后一次更改与Firebase无关.如果您尝试提醒值,也会发生这种情况:
var star = $('.rating');
star.click(function() {
alert(star.val());
});
当您调试问题(或创建MCVE)时,这是一个关键点:尽量从问题中删除尽可能多的技术.通过从这个微小的代码片段中删除Firebase,问题就出现了"为什么我的星级评分不能进入Firebase?" "为什么这段代码片段没有显示我点击的星星的价值?" 或者一旦你掌握了它"如何获得我点击的元素的价值?".最后一个是一个问题,你可以输入谷歌并期望得到一个体面的结果,因为你不是第一个与之斗争的人.试图在Firebase上建立星级评级系统的人群要小得多.
最后
正如我已经说过的,你的脚本仍然存在问题.例如:每次点击一个单选按钮都会通过我的Firebase JSON记录器生成一对行:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
{"items":{"42":{"ratings":{"numRatings":""}}}}
因此,每次单击单选按钮时,它似乎会触发Firebase中的两个更改,第二个更改将撤消第一个更改的工作.我很确定我能弄清楚为什么会这样.但我希望通过上述课程,您将能够自己解决这个问题.
我的最终剧本:
(function() {
var firebaseUrl = "https://your.firebaseio.com/rating";
var itemId = 42; // TODO: look up Id of the actual item
var rootRef = new Firebase(firebaseUrl);
var itemRef = rootRef.child("items").child(itemId);
var star = $('.rating');
var numRatings;
star.click(function() {
itemRef.child("ratings").child("numRatings").set($(this).val());
});
var cumulativeRating;
var averageRating;
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
if (ratingsData) {
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
}
});
})();
它也在jsbin上,我在那里调试:http://jsbin.com/lekifefuce/1/edit?js,output
1> Frank van Pu..:
你的代码中有很多小错误.我将带您了解其中的一些.但是,不要只是,请花点时间了解我实际上是如何解决这些问题的.您的第一个目标应该是能够调试自己的代码以摆脱这些更简单的错误.
好的,我会写两个问题.可能会有更多,但这已经需要足够的时间.
处理Firebase中还没有数据的情况
获取单击的单选按钮的值
处理Firebase中还没有数据的情况
将代码粘贴到jsbin中时发生的第一件事是它将它记录到devtools中的Javascript控制台(你得到这些F12并且在开发时应始终保持它们打开):
未捕获的TypeError:无法读取null的属性'numRatings'
这是现代Javascript的空指针异常版本,是因为你.numRatings
对某些东西做了null
或者undefined
.幸运的是,你只有.numRatings
一个地方:
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
});
因此它看起来ratingsData
没有价值,这确实是在项目获得评级时第一次发生.在这种情况下,Firebase将value
使用null
(或undefined
)触发事件.
处理它很容易:
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
if (ratingsData) {
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
}
});
在实际的实现,你可能会想一个补充else
到if
,并表明没有/没有足够的收视率呢.
获取单击的单选按钮的值
您将点击的值传递给Firebase的代码段是:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set(star.val());
});
我做的第一件事是在那里添加一个日志记录语句,看看点击是否到达代码:
var star = $('.rating');
star.click(function() {
console.log('click');
itemRef.child("ratings").child("numRatings").set(star.val());
});
当我现在单击单选按钮时,它会记录click
.所以看起来这是正确连接的.我经常会把一个Javascript debugger
语句而不是console.log
下一步,但这一次决定反对.
我做的下一个技巧是设置一个简单的Firebase记录器,以显示更改是否通过Firebase:
new Firebase('https://you.firebaseIO.com/rating').on('value', function(s) { console.log(JSON.stringify(s.val())); })
您可以将其添加到脚本的顶级位置.我经常将它添加到Chrome的devtools控制台.每次Firebase的值发生变化时,都会记录下面的内容:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
或者它应该做什么,但在原始脚本中它从未这样做.所以我们进入了点击处理程序,但是这个值没有进入Firebase.
仔细检查发现了一些奇怪的东西:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set(star.val());
});
您可以使用star
此代码段第一行中的变量指向所有评级元素.但是在你执行的click处理程序中star.val()
,这意味着你希望它引用一个rating元素:被点击的元素.
这里有一个关于变量名称的快速说明:通过star
对包含所有评级元素的变量使用单数来设置自己的错误.我将该变量命名为stars
,以表明它包含多个星星.那样你在打字时就会更容易看到有些东西闻起来stars.val()
.
我不是jQuery专家,但jQuery的click方法文档的快速Google 似乎表明你可以访问被点击的元素this
.所以代码片段必须是:
var star = $('.rating');
star.click(function() {
itemRef.child("ratings").child("numRatings").set($this).val());
});
有了它,我的Firebase JSON记录器开始喷出数据:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
这些值现在可以用于Firebase了!
从问题中消除技术
请注意,最后一次更改与Firebase无关.如果您尝试提醒值,也会发生这种情况:
var star = $('.rating');
star.click(function() {
alert(star.val());
});
当您调试问题(或创建MCVE)时,这是一个关键点:尽量从问题中删除尽可能多的技术.通过从这个微小的代码片段中删除Firebase,问题就出现了"为什么我的星级评分不能进入Firebase?" "为什么这段代码片段没有显示我点击的星星的价值?" 或者一旦你掌握了它"如何获得我点击的元素的价值?".最后一个是一个问题,你可以输入谷歌并期望得到一个体面的结果,因为你不是第一个与之斗争的人.试图在Firebase上建立星级评级系统的人群要小得多.
最后
正如我已经说过的,你的脚本仍然存在问题.例如:每次点击一个单选按钮都会通过我的Firebase JSON记录器生成一对行:
{"items":{"42":{"ratings":{"numRatings":"3"}}}}
{"items":{"42":{"ratings":{"numRatings":""}}}}
因此,每次单击单选按钮时,它似乎会触发Firebase中的两个更改,第二个更改将撤消第一个更改的工作.我很确定我能弄清楚为什么会这样.但我希望通过上述课程,您将能够自己解决这个问题.
我的最终剧本:
(function() {
var firebaseUrl = "https://your.firebaseio.com/rating";
var itemId = 42; // TODO: look up Id of the actual item
var rootRef = new Firebase(firebaseUrl);
var itemRef = rootRef.child("items").child(itemId);
var star = $('.rating');
var numRatings;
star.click(function() {
itemRef.child("ratings").child("numRatings").set($(this).val());
});
var cumulativeRating;
var averageRating;
itemRef.child("ratings").on("value", function(ratingsSnapshot) {
var ratingsData = ratingsSnapshot.val();
if (ratingsData) {
numRatings = ratingsData.numRatings;
cumulativeRating = ratingsData.cumulativeRating;
averageRating = cumulativeRating / numRatings;
}
});
})();
它也在jsbin上,我在那里调试:http://jsbin.com/lekifefuce/1/edit?js,output
写下你的评论吧 !
推荐阅读
-
本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ...
[详细]
蜡笔小新 2023-12-13 18:08:58
-
本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ...
[详细]
蜡笔小新 2023-12-14 16:12:01
-
-
本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ...
[详细]
蜡笔小新 2023-12-14 13:56:20
-
本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ...
[详细]
蜡笔小新 2023-12-13 13:58:25
-
在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ...
[详细]
蜡笔小新 2023-12-12 14:56:31
-
本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ...
[详细]
蜡笔小新 2023-12-12 12:45:59
-
一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ...
[详细]
蜡笔小新 2023-12-14 11:39:45
-
我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ...
[详细]
蜡笔小新 2023-12-14 10:20:38
-
本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ...
[详细]
蜡笔小新 2023-12-14 10:06:19
-
篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 09:50:34
-
本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ...
[详细]
蜡笔小新 2023-12-14 09:31:45
-
ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ...
[详细]
蜡笔小新 2023-12-13 20:28:08
-
像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ...
[详细]
蜡笔小新 2023-12-13 15:19:01
-
本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ...
[详细]
蜡笔小新 2023-12-12 21:54:15
-
本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ...
[详细]
蜡笔小新 2023-12-12 12:55:55
-
H小气淘淘_238
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
-
1vm workstation pro 安装centos7
-
2转载:VerilogHDL可综合设计+Comments
-
3互联网基础设施服务业迎来新发展
-
4LOL再迎史诗级改动!10.4版本即将重磅上线,阿木木这一英雄或将非ban必选,你觉得呢?:小妖洋设置
-
5awvs,burpsuite,xray三者联动躺着挖洞
-
6社区_国内首次 Istio Meetup 来了,主流社区专家邀你来共聊
-
7前端和后端之间有什么区别
-
8各类型转换成定长
-
9Django企业开发实战学员管理系统(2)
-
10MFC中如何将24位颜色数组显示出来?
-
11ngScreeningangular 挑选器
-
12java数据库中文乱码解决方法[java基础]
-
13Aliyun Linux 如何安装 php7.3 tengine2.3.2 mysql8.0 redis5
-
14django异常日志_Sentry前端异常追踪平台集成钉钉消息提醒
-
15PNY推出LX2030与LX3030系列Chia挖矿专用SSD
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有