我有一个AJAX请求,它返回以下文本并将其分配给名为authCodes
的JavaScript变量。
来自AJAX请求的文本:value === '1' || value === '2' || value === '3'
。
以下代码适用于手动插入的文本。
$.validator.addMethod("authCode", function(value, element, param) {
return this.optional(element) || (value === '1' || value === '2' || value === '3');
}, "Please enter a valid access code.");
但是,当我尝试将变量authCodes
放入时,该函数不起作用。这是插入变量而不是手动。
$.validator.addMethod("authCode", function(value, element, param) {
return this.optional(element) || (authCodes);
}, "Please enter a valid access code.");
此代码与表单验证有关,似乎使用第二种方法,文本输入的内容将被忽略并允许任何值通过。而使用第一种方法,只允许值为1,2和3。
感谢任何帮助,并提前感谢您的时间。
答案 0 :(得分:0)
要从字符串执行javascript代码,您必须使用eval()函数:
$.validator.addMethod("authCode", function(value, element, param) {
return this.optional(element) || eval(authCodes);
}, "Please enter a valid access code.");
请注意,使用此功能很危险,并允许任何人执行任何批次的代码。最好获得JSON响应。
答案 1 :(得分:0)
您只是在这里与字符串进行比较。如果您确实想要执行从ajax回复中获得的代码,则可以使用javascripts的var SocketMedium = {
sessions: {},
onEvent: function (event, cb) {
if (!this.sessions[event]) {
this.sessions[event] = [];
this.sessions[event].push(cb);
} else {
this.sessions[event].push(cb);
}
console.log('onEvent: ', event);
},
rTrigger: function (event, data) {
console.log('Started rTrigger: ', event);
if(this.sessions[event]){
console.log('FOUND: ', event);
this
.sessions[event]
.forEach(function (cb) {
cb(data);
})
}
console.log('Completed rTrigger', this.sessions);
},
cleaner: function(sessionId){
var event = 'session' + sessionId;
if (this.sessions[event]) {
delete this.sessions[event];
console.log('SocketMedium cleaned: ', this.sessions[event]);
}
console.log('SocketMedium can not find: ', this.sessions[event]);
}
};
module.exports = SocketMedium;
。请注意,这可能会变得非常危险,因为您的代码将被执行。但将其更改为可行:
eval
获得可接受值的列表会更好,然后检查您的值是否在此列表中。
答案 2 :(得分:0)
您无法从AJAX响应中获取字符串,并希望javascript将其视为代码。它把它当成一根绳子,因为它就是它的本质。在评估时,你的第二段代码实际上看起来像这样:我希望:
$.validator.addMethod("authCode", function(value, element, param) {
return this.optional(element) || ("value === '1' || value === '2' || value === '3'");
}, "Please enter a valid access code.");
javascript会将非空字符串视为" truthy"并将其评估为真。上面的答案确实建议使用eval()
这可能有效,但是非常危险,我不推荐它。
我希望您想要的是让您的AJAX返回一系列值,例如[' 1',' 2',' 3']然后检查值是否在数组中。