Web3js

.new() 在 jQuery 點擊處理程序中不起作用

  • July 8, 2016

我將 truffle 與 testrpc 一起用作我的 Dapp 開發平台。當我嘗試使用 .new() 方法創建契約的新實例時,我在將這個新契約實例的契約詳細資訊列印到瀏覽器的 JS 控制台中的 console.log 時遇到問題。具體來說,我通過使用 jquery click() 方法來觸發 .new() 方法的呼叫,該方法接收瀏覽器中合約建構子參數的值。我正在使用的程式碼包含在 index.html 文件中引用的 app.js 文件中,如下所示:

$("#clickButton").click(function() {

   var accounts = web3.eth.accounts;
   var Param1 = parseInt($("input#param1").val());
   var Param2 = parseInt($("input#param2").val());
   var Param3 = parseInt($("input#param3").val());

   console.log(Param1,Param2,Param3)

   var myContractInstance=myContract.new(Param1,Param2,Param3,{ from: accounts[0]});

   console.log(myContractInstance);

   myContractInstance
   .then(function(contract) {
   console.log('Contract created', contract)
   })
   .catch(function(err) {
   console.log('Error', err)
   });

我在 JS 控制台中得到的列印輸出如下(注意:我的 Param1、Param2 和 Param3 值的輸入值分別為 1111,222 和 3333:

1111 222 3333 Promise {_bitField: 0, _fulfillmentHandler0: undefined, _rejectionHandler0: undefined, _promise0: undefined, _receiver0: undefined…} 錯誤錯誤:無效的 JSON RPC 響應:“”(…)

很明顯,這些值正在被正確使用(因為它們正在被列印出來)。此外,很明顯正在創建 promise 對象(因為它也已正確列印出來)。此後似乎出錯了。

但是,如果我將上面完全相同的程式碼複製並粘貼到瀏覽器 JS 控制台中,那麼我不會收到上面的錯誤,即契約按預期在 console.log 中列印出來,沒有問題。我很困惑為什麼如果我使用 jquery click() 方法會出現錯誤,但如果我將程式碼直接打入 JS 控制台,我不會收到錯誤消息。任何幫助深表感謝。

點擊按鈕的預設行為是送出表單。當您點擊該連結時,頁面會從表單送出刷新,從而中斷 web3 請求。

添加return false到點擊處理程序的末尾以防止預設瀏覽器操作,它將起作用。

引用自:https://ethereum.stackexchange.com/questions/6789