eval没有在javascript中运行

时间:2011-06-16 11:25:24

标签: javascript jquery ajax eval

我在设置educationflag变量时出现问题1.我正在解决的问题是如果标志为1则不调用enableEdit.php文件。

当控件进入if条件时,我想将标志设置为1。此时控件进入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 个答案:

答案 0 :(得分:3)

如果不尝试解决潜在问题并阻止全球范围的污染,这应该可行。请注意我已将reserved word类重命名为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 :(得分:1)

传递给函数的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;

希望有所帮助。

答案 2 :(得分:0)

我不明白你在代码中想要做什么......你说你想“如果flag为1则不调用enableEdit.php”。如果是这样的话,你为什么不能这样做:

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

摆脱你的eval陈述?