Ajax请求问题:错误80020101

时间:2011-02-07 07:35:27

标签: ajax internet-explorer jsp jspinclude

我有一个返回jsp页面的请求。但事实是,jsp包含jsp:include in(它在其中调用另一个jsp文件),即给出错误80020101。

有什么想法吗?

由于

14 个答案:

答案 0 :(得分:34)

如果您正在从jQuery执行AJAX调用并且在数组末尾传递额外的逗号,也可能会出现此错误,如下所示:

$.post('http://example.com/example1/',{
  field1:sField1,
  field2:sField2,
  field3:sField3,
  field4:sField4,
  field5:sField5,
},function(sData){
  if (console) { console.log(sData); }
});

在sField5之后看到逗号?那是语法错误。没有其他浏览器会关心IE。 IE将抛出模糊的80020101错误(这意味着“无法评估你的Javascript - 你有一个语法错误”)如果你使用jQuery,它将实际上莫名其妙地追逐它,因为调试器只会指向eval行在jQuery中。感谢Microsoft,IE调试器对你来说是没用的。下次出现80020101错误时,我的建议是:

  1. 查找任何AJAX调用并寻找额外的逗号。
  2. 查找任何数组(如花括号中的内容),最后会有一个额外的逗号。
  3. 如果仍然无效,请查看使用<!--//-->标记Javascript的技巧。这是jQuery的一个已知问题,直到1.7.2,它仍然是jQuery团队提交的错误。
  4. 转到最新版本的jQuery。
  5. 从你的脚本块中逐个删除东西,然后慢慢添加这些东西,直到找到有问题的代码片段。

答案 1 :(得分:8)

删除使用src-attribute导入脚本的javascript声明。如果你真的需要它,你可以将你的javascript文件更改为inline-javascript。

来源: http://bytes.com/topic/javascript/answers/750333-ie-syntax-error-80020101-undefined-array

最简单的方法是向您的AJAX请求添加参数,例如 ajax = 1 ,并在请求时隐藏 ajax - 参数存在时的javascript声明。

我不认为这与使用jsp:include包含文件有任何关系,因为浏览器不知道除了你输入的HTML之外的其他内容。

答案 2 :(得分:5)

我现在遇到过两次jQuery(即使是最新版本)这个问题。唯一的解决方案是将您的javascript的所有复制并粘贴到一个大文件中,然后通过JSLint(jsfiddle.net,首选)运行它。它能够指出我能够修复的几个小错误(包括我的一个数据回调结构中的额外逗号),然后重新复制并粘贴回原来的位置以消除问题。

http://jsfiddle.net/devlshone/QKxup/3/

答案 3 :(得分:5)

我有同样的错误,但在我的情况下,有一个保留字'class'。 以下是一段清晰明了的代码:

function foo(ajaxResponse){
  $(elem).attr('class', ajaxResponse.class);
}

我把它重写为:

$(elem).attr('class', ajaxResponse['class']);

希望这有用。

答案 4 :(得分:4)

在我的案例中,我发现我的JS代码中有一条HTML注释:

<script type="text/javascript">
<!-- Unexpected Comment -->
//code...
</script>

我将<!-- -->替换为/* */并且有效。 希望它会帮助别人。

答案 5 :(得分:1)

我遇到了这个问题,IE的错误消息不是很有帮助。所以,我在Mozilla Firefox中访问了我的网站,Firefox能够找到有问题的确切代码行。不是高科技修复,但如果您一直使用IE来调试此问题,请尝试在FF中加载您的站点(安装了Firebug扩展)并检查控制台输出。

答案 6 :(得分:1)

在我的情况下,问题是在错误函数结束时Ajax POST中的其他无用的昏迷:

$.ajax({
     type: 'POST',
     dataType: 'text',
     url: '../Client/GetName',
     data: { ClientId: id},
     success: function (respone) {
                alert(respone);
     },
     error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.statusText);
     }, //<- look here, this guy complicated my simple programmer life
 });

删除后一切正常。

答案 7 :(得分:0)

你是否有机会包括一个js文件?

因为

错误80020101表示IE无法编译脚本。

答案 8 :(得分:0)

使用jquery时,针对其他问题出现此错误。

更改      的 $(文件)。就绪(函数(){});      至      的 $(窗口).load(函数(){});

答案 9 :(得分:0)

想要分享我的经验。就我而言,它与javascript无关。这是因为同事的HTML中的这一行使用了角度:

 <img data-ng-model="previewImage" src="" data-ng-src="{{imageURL}}" alt="" ></img>

我记得有一个空的src通常是件坏事。我填充了src字段,错误就消失了。

答案 10 :(得分:0)

使用jQuery 1.10.2时我遇到了这个错误,并且正在加载一个不存在的文件。

因此请确保您尝试加载的文件是正确的,否则IE8会抛出80020101错误。

答案 11 :(得分:0)

我的问题是由以下原因造成的:

var a = b = c = true;

转向

var a = true;
var b = true;
var c = true;

现在它运作正常!

再见 MA

答案 12 :(得分:0)

我也遇到了这个问题,但在仔细查看我的脚本文件之后,我发现我犯了一个小错误,在其他浏览器上运行顺利,但IE选择它并向我显示错误:

我之前的代码是:

var autocomplete = new google.maps.places.Autocomplete(searchTextField ,options);

经过分析,我得到searchTextField是id,我必须在使用它之前得到它的值

所以我将其改为:

var input = document.getElementById('searchTextField');
var autocomplete = new google.maps.places.Autocomplete(input,options);

它工作正常。

IE检测到它真的很酷,但微软可能会增强浏览器以显示特定原因的特定错误,因为如果相同的代码在其他浏览器中工作则非常令人沮丧

答案 13 :(得分:0)

我错过了把'var&#39;在变量声明面前,把它解决了问题。

<script>
    uploadDocument = "Some message";
</script>

我把它修改为:

var uploadDocument = "Some message";

根本原因是我在表单中有一个元素具有相同的id&#34; uploadDocument&#34;,因此上述声明导致html格式错误