2014-07-19 49 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

相關問題