You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从UI向Solidity智能合约传递字符串时触发Error: invalid string value错误的排查与解决请求

解决Solidity合约字符串参数传递的Invalid String Value错误

你遇到的Error: invalid string value (arg="_name", coderType="string", value=null)错误,核心原因是UI代码里错误地把字符串类型的输入值强制转换成了整数,而你的Solidity合约setData方法要求的是string类型参数,类型不匹配直接导致了这个报错。

问题代码分析

看你提交按钮的点击事件处理逻辑:

var name = 0;
name = parseInt($('#name').val());
var birthday = 0;
birthday = parseInt($('#birthday').val());
  • 姓名是纯字符串内容,用parseInt转换后,非数字输入会变成NaN,空输入则会变成null,完全不符合合约需要的字符串类型
  • 生日输入的是YYYY-MM-DD格式的字符串,parseInt只能提取开头的年份数字,最终得到的是整数,同样不满足合约的string参数要求

修复方案

只需要去掉多余的parseInt转换,直接获取输入框的字符串值即可,Web3.js v1.x版本会自动处理字符串参数的编码和传递,不需要额外的字符串解析代码。修改后的点击事件代码如下:

$('#submit').click(function() {
    // 直接获取输入的字符串值,trim去掉首尾空格
    var name = $('#name').val().trim();
    var birthday = $('#birthday').val().trim();

    // 先做基础输入校验,避免空值提交浪费Gas
    if (!name || !birthday) {
        alert("请填写完整的姓名和生日信息");
        return;
    }

    web3.eth.getAccounts().then(function(accounts){
        var acc = accounts[0];
        // 直接传递字符串参数给合约方法
        return contract.methods.setData(name, birthday).send({from: acc});
    }).then(function(tx) {
        console.log("交易执行成功:", tx);
        // 可选:提交成功后清空输入框
        $('#name').val('');
        $('#birthday').val('');
    }).catch(function(error) {
        console.error("交易执行失败:", error);
    })
});

后续扩展提示

如果之后你要完善合约,把playerAddress和playerNationality的赋值逻辑放开(取消合约里的注释),只需要在UI里添加对应的参数获取即可,比如:

var address = $('#address').val().trim();
var nationality = $('#nationality').val().trim();
// 然后调用contract.methods.setData(name, birthday, address, nationality).send(...)

完全不需要额外的字符串处理逻辑,Web3.js会自动完成参数的编码工作。

内容的提问来源于stack exchange,提问作者tombodders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:02:40