首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ServiceNow: JavaScript TypeError:无法读取未定义的属性

ServiceNow: JavaScript TypeError:无法读取未定义的属性
EN

Stack Overflow用户
提问于 2018-06-14 01:45:15
回答 1查看 3.2K关注 0票数 1

我正在用ServiceNow编写一个onChange客户端脚本,在前端客户端上遇到了Javascript错误。我一直收到TypeError: Cannot read property 'u_emp_name‘of undefined。变量似乎发生了变化,因为我一度也没有定义u_pos_office,但是数据拉取正确,并且对我的代码功能没有性能影响。

可能是什么原因导致类型错误?

脚本如下:

代码语言:javascript
复制
function onChange(control, oldValue, newValue, isLoading) {

    var billNum = g_form.getReference('u_billet',findBilletInfo);
    console.log('Emp Name: ' + billNum.u_emp_name);
    console.log('OFfice: ' + billNum.u_pos_office);
    console.log('Career Field: ' + billNum.u_pos_career_field);

   if (isLoading || newValue == '') {
      return;
   }

    if (oldValue != newValue){

        findBilletInfo(billNum);

    }

    function findBilletInfo(billNum){

        console.log('Bill Num' + billNum);
        console.log('encumbent' + billNum.u_emp_name);

        var empName = billNum.u_emp_name;
        var empNameStr = empName.toString();

        console.log(empName);
        console.log(empNameStr);

        g_form.setValue('u_organization_office',billNum.u_pos_office);
        g_form.setValue('u_encumbent',billNum.u_emp_name);
        g_form.setValue('u_old_career_field',billNum.u_pos_career_field);
        g_form.setValue('u_old_career_specialty',billNum.u_pos_career_specialty);   
        g_form.setValue('u_old_occupational_series',billNum.u_pos_series);
        g_form.setValue('u_old_grade',billNum.u_pos_grade);
        g_form.setValue('u_old_work_category',billNum.u_pos_category);
        g_form.setValue('u_old_job_title',billNum.u_pos_title);
        g_form.setValue('u_losing_rater',billNum.u_emp_rater_name);
        g_form.setValue('u_losing_reviewer',billNum.u_emp_reviewer_name);   

    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-14 02:28:57

这里看起来是个错误

代码语言:javascript
复制
var billNum = g_form.getReference('u_billet',findBilletInfo);
==> console.log('Emp Name: ' + billNum.u_emp_name);

在这种情况下,billNum是未定义的,因为getReference是异步运行的。请参阅documentation for the function

这意味着它不能保证立即或根本不能保证返回值。这可能就是为什么你有时会得到记录,而不是其他记录的原因。

您可以在findBilletInfo回调中移动这些调试日志以检查这些值

代码语言:javascript
复制
if (isLoading || newValue == '') {
  return;
}

var billNum = g_form.getReference('u_billet',findBilletInfo);

function findBilletInfo(billNum) {

    console.log('Bill Num' + billNum);
    console.log('encumbent' + billNum.u_emp_name);
    console.log('OFfice: ' + billNum.u_pos_office);
    console.log('Career Field: ' + billNum.u_pos_career_field);

    ...
}

如果你在Firefox或Chrome中调试,你应该能够只将对象登录到控制台,以便一次浏览整个对象。

代码语言:javascript
复制
function findBilletInfo(billNum) {

    console.log(billNum);

    ...
}

控制台中的输出将如下所示,您可以一次看到所有字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50843273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档