2015-07-30 4 views
0

У меня есть запрос AJAX, который возвращает следующий текст и назначает его переменной JavaScript с именем authCodes. Текст запроса AJAX: value === '1' || value === '2' || value === '3'.Передача переменной строки в качестве параметра в JavaScript/jQuery

Следующий код работает с введенным текстом.

$.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

Вы можете изменить ответ AJAX? –

+0

Я извлекаю эти значения из базы данных и помещаю их в этот формат, поэтому ручные обновления не нужны для функции проверки. Изменить ответ AJAX на то, что/как? @ k-nut – Nihir

+0

В вашей первой версии 'значение === '1'' относится к 'value', переданному в функцию. Вы уверены, что когда 'authCodes' присваивается значение не' 'значение === '1' || значение === '2' || значение === '3'" '? –

ответ

0

Чтобы выполнить яваскрипт кода из строки, вы должны использовать eval() функции:

$.validator.addMethod("authCode", function(value, element, param) { 
return this.optional(element) || eval(authCodes); 
}, "Please enter a valid access code."); 

быть предупрежден, использование этой функции является опасным и позволил любому выполнить любую партию коды. Желательно получить ответ JSON.

0

Вы сравниваете только строку. Если вы действительно хотите выполнить код, полученный из вашего ответа ajax, вы можете использовать eval javascripts. Помните, что это может стать очень опасным, хотя ваш код будет просто выполнен. Но изменить его на это будет работать:

$.validator.addMethod("authCode", function(value, element, param) { 
return this.optional(element) || eval(authCodes); 
}, "Please enter a valid access code."); 

Было бы гораздо лучше, чтобы получить список допустимых значений, а затем просто проверить, если значение, которое у вас есть в этом списке.

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'], а затем проверьте, находится ли значение в массиве.

+0

Я не согласен с вашим первым утверждением, javascript может обрабатывать строку, такую ​​как код, действительно, это очень опасно. – Jitrixis

+0

Это правда, вы можете обрабатывать строку как код с помощью eval(), но вам нужно использовать функцию, чтобы javascript оценивал строку, такую ​​как код. Он не будет делать это автоматически, чего ожидал OP. И вы не должны так поступать, во всяком случае! :) – mrcheshire

+0

Не согласен снова, вы можете использовать его не опасным способом, как в анонимной функции, вам нужно выполнить функцию с именем с добавленным текстом из переменной, проверенной фиксированным списком. Eval в javascript менее опасен, чем в PHP, в javascript все можно переписать или выполнить. – Jitrixis

Смежные вопросы