WrappedNative原型对象的非法操作

Fri*_*ias 8 xml ajax jquery cgi

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

我有这个代码:

    $.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);
                    }
            }
    });
Run Code Online (Sandbox Code Playgroud)

这给了我FF中的以下错误:"对WrappedNative原型对象的非法操作".

当我删除代码的"成功"部分时,错误消息仍然存在.之后,我删除了"完整"的parte,错误信息也在那里.但是,当我删除以下代码行时:data:({xmlToFormat:xmlR,service:"paperList"}),消息消失了.

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

谢谢

Mar*_*ope 8

该错误消息通常指的是当您尝试包装本机函数时,例如"eval"

如果你做这样的事情 -



(function() {

   var t = eval;

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

}();
Run Code Online (Sandbox Code Playgroud)

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

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

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

我将查看displayResult和loadXMLDoc中发生了什么 - 我相信非法操作安全检查最近被添加到FireFox中,所以如果您可以尝试像3.0这样的旧版本,您可能会确认这一区别.

否则,我没有看到任何与您提供的代码相关的内容,并且使用ajax发送xml数据完全有效.