2016-04-23 15 views
0

我正嘗試使用另一個JavaScript文件中定義的classname調用回調函數,但我無法調用。我沒有得到我所犯的錯誤。請讓我知道我在下面的代碼中所犯的錯誤,並且謝謝您爲您提供的幫助。如何使用另一個JavaScript文件中定義的類名稱調用回調函數

我已經創建了一箇中央JavaScript文件像下面

CentralScript.js

function CentralScript() { 

} 

CentralScript.prototype.makeRequest = function (className, cbf, dataToSend) { 
    $.ajax({ 
     url: 'apiurl', 
     type: 'POST', 
     dataType: 'json', 
     data: { 
      parameters : dataToSend 
     }, 
     success: function (responseData) { 
      this.showResponse(className, cbf, responseData); 
     }, 
     complete: function() { 

     }, 
     error: function() { 
      console.log("Error occurred..."); 
     } 
    }); 
}; 

CentralScript.prototype.showResponse = function (className, cbf, data) { 
    className.cbf(data); 
}; 

和我創建像另一個文件下

SomeFile.js

function SomeFile() { 

} 

SomeFile.prototype.sayHi = function() { 
    var obj = new CentralScript(); 
    var dataToSend = { 
     method: 'someMethod' 
    }; 
    obj.makeRequest('SomeFile', 'resultToShow', dataToSend); 
}; 

SomeFile.resultToShow = function (data) { 
    console.log(data); 
}; 

和我創建main.js文件中像下面

main.js

var ProjectName= (function() { 

    var sfObj; 

    function init() { 
     createObjects(); 
     initiateProject(); 
    } 

    function createObjects() { 
     sfObj = new SomeFile(); 
    } 

    function initiateProject() { 
     sfObj.sayHi(); 
    } 

    return { 
     init : init 
    }; 

})(); 
$(ProjectName.init); 

我得到當我從SomeFile.js文件製作Ajax請求的響應,但響應沒有登錄到控制檯。

我得到 'CBF' 作爲CentralScript.js文件

CentralScript.prototype.showResponse = function (className, cbf, data) { 
    className.cbf(data); 
}; 

我可以這樣調用「className.cbf(數據)的回調函數未定義在 'showResponse方法' 功能目前;「出現在SomeFile.js

請讓我知道我做的錯誤,謝謝你展示了很多的幫助。

+2

'className'是一個**字符串**,字符串沒有名爲'cbf'的屬性。 –

+0

'this' at'this.showResponse(className,cbf,responseData);'會引用請求對象,而不是'CentralScript' – guest271314

+0

看看[點符號vs括號表示法](https://stackoverflow.com/questions/ 4968406/JavaScript的屬性的訪問點表示法-VS-括號)。你不應該傳遞名字 - 只是傳遞它們代表的對象! – Bergi

回答

0

這個問題沒有什麼幾個文件。 這是已更正的腳本:

//CentralScript.js 
    function CentralScript() { 

    } 

    CentralScript.prototype.makeRequest = function (className, cbf, dataToSend) { 
     var $this = this;//save for further use 
     $.ajax({ 
      url: 'apiurl', 
      type: 'POST', 
      dataType: 'json', 
      data: { 
       parameters: dataToSend 
      }, 
      success: function (responseData) { 
       //cbf(responseData);//cbf is SomeFile.resultToShow 
       $this.showResponse(className, cbf, responseData);//this is $.ajax here 
      }, 
      complete: function() { 

      }, 
      error: function() { 
       console.log("Error occurred..."); 
      } 
     }); 
    }; 

    CentralScript.prototype.showResponse = function (className, cbf, data) { 
     //className.cbf(data);//undefined 
     cbf(data);//cbf is SomeFile.resultToShow 
    }; 

//SomeFile.js 
     function SomeFile() { 

    } 

    SomeFile.prototype.sayHi = function() { 
     var obj = new CentralScript(); 
     var dataToSend = { 
      method: 'someMethod' 
     }; 
     //obj.makeRequest('SomeFile', 'resultToShow', dataToSend); 
     obj.makeRequest(this, this.resultToShow, dataToSend);//this is SomeFile 
    }; 

    SomeFile.prototype.resultToShow = function (data) {//need .prototype to add function to SomeFile 
     console.log(JSON.stringify(data)); 
    }; 
+0

@Alexander Kudryashev,非常感謝您的回覆,您的解決方案對我來說非常棒。 –

相關問題