Eval не работает в JavaScript - PullRequest
0 голосов
/ 16 июня 2011

У меня проблемы с установкой переменной Educationflag в 1. Проблема, которую я решаю, - не вызывать файл enableEdit.php, если флаг равен 1.

Я хочу установить флаг в 1, когда приходит элементв условии if.Прямо сейчас элемент управления входит в условие if, но не устанавливает переменную в 1. Мой код напечатан ниже.Я

var educationFlag=0;

function editEducation(class){

   //I send education in class variable. So class ='education';
   var condition=eval(class+'Flag');
   if ( condition == 0 ){
      $.ajax({
        url: "enableEdit.php",
        data: "class="+class,
        success: function(msg) {    
        }
    })
      eval(class+'Flag'=1);
   }
}

Спасибо

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

Не пытаясь исправить ваши основные проблемы и остановить загрязнение глобального масштаба, это должно работать. Обратите внимание, что я переименовал класс зарезервированное слово в varPrefix

var educationFlag=0;

function editClass(varPrefix) {
   if (window[varPrefix+'Flag'] === 0 ){
      $.ajax({
        url: "enableEdit.php",
        data: "class="+varPrefix,
        success: function(msg) {    
          window[varPrefix+'Flag']=1;
        }
    })
  }
}

отправляю образование в переменную varPrefix. Итак, varPrefix = 'education';

editClass("education") ...

1 голос
/ 16 июня 2011

Какое значение переменной class передается в функцию? Я сделаю обоснованное предположение, что это будет что-то вроде education? Это верно?

В этом случае первое eval() будет таким:

var condition=eval('educationFlag');

и второй будет такой:

eval('educationFlag'=1);

Второй сбой, потому что часть =1 отсутствует в строке. Это короткий ответ, который напрямую решает вашу проблему.

Тем не менее, ответ лучше заключается в том, что eval() - неправильная вещь. Вы никогда не должны использовать eval() для такого рода вещей. Поскольку educationFlag является глобальной переменной, вы можете обращаться к ней через объект window как элемент массива: это означает, что вы можете делать то же самое, не используя рискованный eval() вообще.

Вы можете ссылаться на это так: window['educationFlag']

Следовательно, ваши eval() строки можно заменить следующим образом:

var condition=window[class+'Flag'];

и

window[class+'Flag']=1;

Надеюсь, это поможет.

0 голосов
/ 16 июня 2011

Я не понимаю, что вы пытаетесь сделать в своем коде ... Вы говорите, что хотите "не вызывать enableEdit.php, если флаг равен 1".Если это так, почему вы не можете просто сделать:

if(flag == 1) { ... }

И избавиться от ваших eval заявлений?

...