很抱歉,如果这个答案与本网站中的其他问题相似,
但我找不到我需要的东西。
我有以下代码:
$.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原型(prototype)对象的非法操作”。
当我删除代码的“成功”部分时,错误消息仍然存在。
之后,我删除了“complete”部分,错误消息也在那里。
但是,当我删除代码的以下行时:
数据:({xmlToFormat:xmlR,service:“paperList”}),
消息不见了。
但是我不明白原因。是否可以在ajax事件中将“xml”作为数据发送到CGI?
谢谢
最佳答案
该错误消息通常是指当您尝试包装 native 函数(例如“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数据完全有效。