在JavaScript / jQuery

时间:2015-07-30 07:54:34

标签: javascript jquery validation

我有一个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。

感谢任何帮助,并提前感谢您的时间。

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']然后检查值是否在数组中。