通过引用传递对象时出现IE问题和动态添加属性

时间:2011-09-20 19:16:13

标签: javascript object reference

所以,我已经创建了一个函数来对我从AJAX调用中收到的XML文件进行一些错误检查。部分验证是该函数然后构建一个对象,以便在将数据处理成表单时轻松访问。在FF,工作就像一个魅力。 IE因错误而死:

  

Object不支持此属性或方法

这是函数(减去不重要的位):

function checkReceiveXMLTagString( doc, messageObject, tag ) {

    var tag_nodes = doc.getElementsByTagName( tag );

    ...do some error checking...

    messageObject[tag] = tag_str; <-- error occurs on this line

    return true;
}

以下是函数调用的示例:

if ( checkReceiveXMLTagString( messageObject.Name[0], messageObject.Name[0], "First" ) ) {

    ...process messageObject.Name[0].First...

}

就像我说的,FF没有问题。 Safari也会加载页面。 IE有问题。

谢谢!

2 个答案:

答案 0 :(得分:1)

看起来某些内容使messageObject成为nullundefined

答案 1 :(得分:1)

如果错误出现在这一行:

messageObject[tag] = tag_str;

然后,我知道可能导致错误的两种方式是:

  1. messageObject不是您可以设置属性的对象(nullundefined是最有可能发生的方式)
  2. tag为null或未定义
  3. 因为我看到你的代码调用了这个函数数百次,所以你不能有效地打破它,我建议你加入一些防御性编码来检查这些条件并输出一些东西到调试控制台来识别问题发生时的状态是什么。您甚至可以使用以下代码触发条件断点:

    if (!messageObject || !tag) {
        debugger;
    }
    

    在最棘手的情况下,你可以在它周围放置一个异常处理程序,并在抛出异常时中断:

    try {
        messageObject[tag] = tag_str;
    } catch(e) {
        debugger;
    }
    

    这两种方法都允许您在调试器中捕获条件,并在出错时检查所有参数。