Проблема запроса Ajax: ошибка 80020101 - PullRequest
22 голосов
/ 07 февраля 2011

У меня есть запрос, который возвращает страницу JSP.Но факт в том, что jsp включает в себя jsp: include (он вызывает в нем другой jsp-файл) и т. Е. Выдает ошибку 80020101.

Есть идеи?

Спасибо

Ответы [ 14 ]

34 голосов
/ 23 апреля 2012

Вы также можете получить эту ошибку, если вы делаете AJAX-вызов из jQuery и передаете дополнительную запятую в конце массива, например:

$.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. Начинайте постепенно удалять элементы из вашего блока сценариев и медленно добавлять элементы, пока не найдете нарушающий код.
8 голосов
/ 07 февраля 2011

Удалите объявления javascript, которые импортируют скрипт, используя атрибут src.Измените свой javascript-файл на inline-javascript, если он вам там действительно нужен.

Источник: http://bytes.com/topic/javascript/answers/750333-ie-syntax-error-80020101-undefined-array

Самый простой способ - добавить параметр вВаш AJAX-запрос, такой как ajax = 1 и скрытие объявлений javascript, когда ajax -параметр существует в запросе.

Я не думаю, что это как-то связанос включением файлов с помощью jsp: include, так как браузер не знает ничего кроме HTML-кода, с которым вы его выбросили.

5 голосов
/ 05 декабря 2012

У меня была такая же ошибка, но в моем случае было зарезервированное слово 'class'.Вот фрагмент кода, чтобы прояснить это:

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

Я переписал это как:

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

Надеюсь, это было полезно.

5 голосов
/ 27 апреля 2012

Я уже дважды сталкивался с этой проблемой с jQuery (даже самой последней версией). ЕДИНСТВЕННОЕ решение - скопировать и вставить все вашего javascript в один большой файл и запустить его через JSLint (предпочтительно jsfiddle.net). Он смог указать на несколько незначительных ошибок (включая лишнюю запятую в одной из моих структур обратного вызова данных), которую мне удалось исправить, а затем повторно скопировать и вставить обратно в исходные места, чтобы устранить проблему .

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

4 голосов
/ 14 ноября 2012

В моем случае я обнаружил, что в моем коде JS есть комментарий HTML:

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

Я заменил <!-- --> на /* */, и это сработало.Надеюсь, это кому-нибудь поможет.

1 голос
/ 23 февраля 2016

В моем случае проблема заключалась в дополнительной бесполезной коме в 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
 });

После удаления все нормально работает.

1 голос
/ 25 марта 2015

Я также столкнулся с этой проблемой, но после тщательного изучения файла скрипта я обнаружил, что допустил небольшую ошибку, которая без проблем работает в другом браузере, но IE выбирает ее и показывает ошибку:

Мой предыдущий код был:

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

После анализа я понял, что searchTextField - это идентификатор, и я должен получить его значение, прежде чем его использовать

Так что я изменил его на:

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

и все работает нормально.

Это действительно круто, что IE обнаруживает это, но Microsoft может улучшить браузер, чтобы показать конкретную ошибку по конкретной причине, потому что это очень расстраивает, если тот же код работает вдругие браузеры

1 голос
/ 26 декабря 2014

Я столкнулся с этой проблемой, и сообщения об ошибках IE были не очень полезны.Итак, я посетил мой сайт в Mozilla Firefox, и Firefox смог точно определить строку кода, которая была проблематичной.Не высокотехнологичное исправление, но если вы использовали только IE для отладки этой проблемы, попробуйте загрузить свой сайт в FF (с установленным расширением Firebug) и проверить вывод консоли.

0 голосов
/ 08 октября 2015

Я пропустил, чтобы поставить 'var' перед объявлением переменной, утверждая, что это решило проблему.

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

Я исправил это значение:

var uploadDocument = "Some message";

Причина былачто у меня был элемент в форме с тем же идентификатором «uploadDocument», поэтому приведенное выше объявление приводило к неправильному форматированию HTML

0 голосов
/ 31 марта 2014

Мои проблемы были вызваны:

var a = b = c = true;

превратился в

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

Теперь все отлично работает!

Bye MA

...