2014-07-19 20 views
0

因此,这是处理xmlhttprequest的简单JavaScript代码的一部分。即产生错误的部分是在底部(否则如果):未定义的与“已定义”参数不存在函数错误

httpReq.onreadystatechange = function(){ 
     if (httpReq.readyState == 4) { 
      if (httpReq.status == 200) { 
       var strRes = httpReq.responseText; 
       if(xmlOrig) strRes = (new $Xml(strRes, true)).conteudo(xmlOrig); 
       if(elemDest) $id(elemDest).innerHTML = strRes; 
       if(func) { 
        var dadosArray = new Array(4, strRes, httpReq, 'OK', 'Concluído com sucesso.'); 
        window[func](dadosArray); 
       } 
      } else { 
       if(elemDest) elemDest.innerHTML = 'Erro: '+httpReq.status+' | '+httpReq.statusText; 
       if(func) { 
        var dadosArray = new Array(4, false, httpReq, 'erro', 'Erro, conteúdo não carregado!'); 
        window[func](dadosArray); 
       } 
      } 
     } else if(func){ 
      console.log("func? "+typeof(func)); 
      var dadosArray = new Array(httpReq.readyState); 
      window[func](dadosArray); // <-- HERE IS THE ERROR! 
     } 
    } 

然而,执行console.log返回“功能”的说法作为函数,所以哪里是错误?

Safari控制台:

func?功能 TypeError:'undefined'不是函数(评估'windowfunc')

+0

你在哪里定义变量'func'是什么?你没有通过它或在任何地方定义它? – Gerrat

+0

我在根中定义了一个测试函数。首先,我认为这是函数内部的一个错误,但是测试函数无关(作为一个测试)。我认为它可能是一个错误,Safari无法精确到哪里。 – Gustavo

+0

我发现它:func必须是一个字符串,所以我不能定义func = Function,但是func =“NameOfTheFunction”。 – Gustavo

回答

1

您确定func在窗口上吗?您正在检查func,它可能在任何范围内,然后您可以拨打window.func()

+0

由于typeof(func)正在返回“function”,我假定该函数被正确定义,并且我在根中定义了它。 – Gustavo

+0

答案:func必须是一个字符串,所以我不能定义func = Function,但是func =“NameOfTheFunction”。 – Gustavo

1

您可能打算做window["func"]而不是window[func]

后者的表达式相当于window["function(someParam) { ... }"](即,无论func的实际内容是什么)。 window可能没有名称是func的整个字符串化文本内容的属性。

+0

该函数不被称为“func”。我使用func =“doNothing”作为测试,并且在根中定义了函数= doNothing(d){}。 – Gustavo

+0

我找到了。只要你的想法不是答案,它给了我一个不同的想法:func必须是一个字符串,所以我不能定义func = Function,但是func =“NameOfTheFunction”。 – Gustavo

+0

@GustavoPinent持有该函数的变量的名称称为func,并用括号语法用字符串“func”标识该变量。概括两种情况:'window [“someString”]'指的是全局变量'someString',而'window [someVar]'指的是一个全局变量,其名称是* someVar的内容。如果'someVar'设置为'“foo”',那么'window [someVar]'指的是全局'foo'。 – apsillers

相关问题