您知道哪些机制可以防止您的网站被匿名垃圾邮件发送者滥用.
例如,假设我有一个人们可以投票的网站.但我不希望有人一路垃圾邮件到顶部.所以我发现(a)创建一个帐户,只允许投票一次,(b)CAPTCHA减少垃圾邮件.您还知道其他哪些方法以及它们有多好?
我正在努力在一个腌制文件中附加一个列表.这是代码:
#saving high scores to a pickled file
import pickle
first_name = input("Please enter your name:")
score = input("Please enter your score:")
scores = []
high_scores = first_name, score
scores.append(high_scores)
file = open("high_scores.dat", "ab")
pickle.dump(scores, file)
file.close()
file = open("high_scores.dat", "rb")
scores = pickle.load(file)
print(scores)
file.close()
Run Code Online (Sandbox Code Playgroud)
我第一次运行代码时,会打印出名称和分数.
第二次运行代码时,它会输出2个名称和2个分数.
第三次运行代码时,它会输出第一个名称和分数,但它会覆盖第二个名称并使用我输入的第三个名称和分数进行分数.我只是想让它继续添加名称和分数.我不明白为什么它保存名字并覆盖第二个名字.
我的用户中只有极少数人会获得一个验证码,要求他们复制并粘贴代码,但它总是会失败 - 而大多数用户都会得到正常的(复选框)正常通过.谷歌搜索只返回三个人获取验证码的实例,其中没有任何有任何有价值的信息
关于为什么他们获得验证码的任何想法,最重要的是它为什么失败?
我一直在阅读这篇文章http://ejohn.org/blog/how-javascript-timers-work/以及如何setTimeout
和setInterval
其他异步任务(如按钮点击)让我感到困惑.
我知道JS是单线程的,这意味着,AFAIK,所有的回调函数(也称为事件处理程序)将按顺序排队并执行.但是,请看下面我从文章中获取的图片,上面链接:
每个块代表一些工作,并且 - 大约10ms - 计时器被触发.我知道它的回调函数被放在队列中以便以后执行,但是为什么在执行某些事情时可以调用该事件呢?
是因为setTimeout()
开始使用单独的线程在内部计算时间并触发其完成事件?
请注意,我不是在谈论它的回调执行; 相反,我试图了解如何setTimeout
计算时间并解雇它的完成.我知道它的回调将在其给定的时间参数之前调用,但可能在稍后调用,但这是因为当运行时找到一些时间来检查队列中是否有任何要执行的时候,它的回调排队等待.
类似于这个问题,为什么浏览器会接受新的点击进行注册 - 让我们说 - 在用户点击时,一个循环正在幕后工作?
如果你说浏览器为不同的东西维护不同的线程,那么我们可以在单线程浏览器中调用JS吗?
我正在使用带有es7风格的异步/等待方法的babeljs.我有一个主脚本,它将在所有返回promises的对象数组上调用异步方法.我使用Promise.all()等待所有这些返回,但是,这些任务可能需要很长时间,如果它们超过阈值,我想中止所有这些,并且任务以适当的方式处理.
反正有没有完成这样的事情?目前,我能想到的唯一方法是生成一个进程,该进程执行调用这些方法的工作并等待它们全部解决,如果达到时间限制,它可以终止进程并执行它需要的任何处理.
更新:关于主脚本正在等待的这些方法的一些说明......他们可能正在进行一系列的操作(调用外部系统,某些地方的流文件等)而不执行可以独立取消的单个操作.
更新#2:一些未经测试的半伪代码
class Foo1 {
async doSomething() {
// call some external system
// copy some files
// put those files somewhere else (s3)
}
}
class Foo2 {
async doSomething() {
// Do some long computations
// Update some systems
}
}
class FooHandler {
constructor() {
this.fooList = [];
}
async start() {
await Promise.all(this.fooList.map(async (foo) => {
return await foo.doSomething();
}));
}
}
let handler = new FooHandler();
handler.fooList.push(new Foo1());
handler.fooList.push(new Foo2());
// if this …
Run Code Online (Sandbox Code Playgroud) 所以我按照这里的安装,但babel需要很长时间来编译,甚至是小文件:
app.js
let app = 1;
Run Code Online (Sandbox Code Playgroud)
.babelrc
{ "presets": ["es2015"] }
Run Code Online (Sandbox Code Playgroud)
的package.json
"scripts": {
"build": "babel app.js -o dist/app.js"
},
"devDependencies": {
"babel-cli": "^6.4.5",
"babel-preset-es2015": "^6.3.13"
}
Run Code Online (Sandbox Code Playgroud)
然后npm run build
需要〜30s才能编译.
我正在使用 npm@3.3.12
任何人都可以告诉我为什么这是30?
({}+{}).length // = 30?
Run Code Online (Sandbox Code Playgroud)
但这是0?
([] + []).length // = 0?
Run Code Online (Sandbox Code Playgroud) 我有一个数组,现在我想在数组中的每个元素上执行一个函数.
我正在尝试使用map()
功能.问题是,我传递给的回调函数map()
有自己的参数(不是元素,索引,数组).
我可以将参数传递给这样的回调函数吗?怎么样?
我有一个输入文本字段,我触发键事件.在输入时,我使用输入值处理一些特定代码.一切都很棒.
HAML:
%input#myField{:type => "text"}
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
my_field = document.getElementById('myField');
my_field.addEventListener("keypress", function (event) {
if (event.keyCode == 13) {
event.preventDefault();
if (tag_field.value.length != 0) {
console.log(my_field.value);
// Run my specific process with my_field.value
my_field.value = '';
}
}
}, false);
Run Code Online (Sandbox Code Playgroud)
但是现在我想在这个输入上添加datalist.
HAML:
%input#myField{:list => "htmlList", :type => "text"}
%datalist#htmlList
%option{:value => "toto"} toto
%option{:value => "foo"} foo
Run Code Online (Sandbox Code Playgroud)
问题是当我在datalist上导航以选择项目时,我按下回车键.在输入键时,我的侦听器被调用并使用输入的初始值处理我的代码.
在此步骤中,该字段的值为空.之后,该值将替换为datalist中选择的值.
所以我的问题是:
有没有办法改变数据列表的行为,用datalist选择的值替换输入值而不按回车键?(禁用datalist的输入键)
有没有办法检测datalist何时处于活动状态(或可见状态)以处理EventListener中的不同行为?
有一个.toString()
关于Symbol
在ES6返回的字符串表示Symbol
,但不知道为什么'' + Symbol()
不工作(运行这个表达式抛出TypeError
,我不指望)?后者只是调用.toString()
new Symbol
并将+
它追加()它为空字符串吗?
javascript ×7
babeljs ×2
ecmascript-6 ×2
append ×1
asynchronous ×1
captcha ×1
ecmascript-7 ×1
html ×1
html5 ×1
node.js ×1
npm ×1
pickle ×1
python ×1
recaptcha ×1
symbols ×1