【问题标题】:Illegal operation on WrappedNative prototype objectWrappedNative原型对象的非法操作
【发布时间】:2011-02-28 09:29:23
【问题描述】:

如果这个答案与本网站上的其他问题相似,我很抱歉, 但我找不到我需要的东西。

我有这个代码:

    $.ajax({
            url: '../../cgi-bin/executeQuery',
            type: 'GET',
            data: ({siid:5185,of:"xmlWithColID"}),
            dataType: 'xml',
            success: function(xmlR){
                    try{
                            $.ajax({
                                    url: '../../cgi-bin/authList.py',
                                    type: 'GET',
                                    data: ({xmlToFormat:xmlR,service:"paperList"}),
                                    dataType: 'xml',
                                    success: function(data){
                                            try{
                                                    displayResult(data,loadXMLDoc("js/authList/paperTableStyle.xsl"),"divPaperTable");
                                            }catch(e){
                                                    console.log(e.message);
                                            }
                                    },
                                    complete: function(XMLHttpRequest, textStatus){
                                            $('#divMakingAuthorList').addClass('secondary');
                                            $('#divMakingAuthorList').hide();
                                    }
                            });
                    }catch(e){
                            console.log(e.message);
                    }
            }
    });

这给了我在 FF 中的以下错误:“WrappedNative 原型对象上的非法操作”。

当我删除代码的“成功”部分时,错误消息仍然存在。 之后,我删除了“完整”部分,错误消息也在那里。 但是,当我删除以下代码行时: 数据:({xmlToFormat:xmlR,服务:“paperList”}), 消息消失了。

但我不明白原因。是否可以将“xml”作为 ajax 事件中的数据发送到我的 CGI?

谢谢

【问题讨论】:

  • 数据行中的内容看起来像 JSON,而不是 XML。
  • 我最近在为 FireFox 使用 Pentadactyl 扩展时经常遇到这个错误,这非常非常烦人。

标签: jquery xml ajax cgi


【解决方案1】:

该错误消息通常是指当您尝试包装原生函数(例如“eval”)时

如果你这样做 -



(function() {

   var t = eval;

   eval = function() {
      t.apply(window, arguments);
   }

}();

Firefox 将不再允许您使用 eval,因为函数签名不再匹配它的内部参考点,并且它认为这是一种狡猾的策略。我认为这完全是愚蠢的,并且违反了 javascript 灵活性的前提,但这是我们现在必须处理的问题。

类似 var x = document.createElement;调用 x('div') 会让 firefox 像 emo 青少年一样抱怨。

我的猜测是,当 xmlR 未传递给第二个 ajax 请求时,请求将失败,因此您的成功块永远不会被调用。我知道您提到您在没有成功阻止的情况下尝试了调用,但您仍然看到了消息,但也许您可以使用空的成功函数再次尝试确认。

我会检查 displayResult 和 loadXMLDoc 中发生的情况 - 我相信最近在 FireFox 中添加了非法操作安全检查,因此如果您可以尝试像 3.0 这样的旧版本,您可能会确认这种区别。

否则,我看不到您提供的代码有任何明显的地方,并且使用 ajax 发送 xml 数据是完全有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多