JQuery AJAX ошибок вызова в IE8 - PullRequest
       5

JQuery AJAX ошибок вызова в IE8

2 голосов
/ 27 января 2012

У меня довольно простой вызов ajax, построенный на jQuery. Он отлично работает в IE9, Firefox и Chrome (так что я вполне уверен, что страница, на которую публикуется вызов AJAX, работает нормально), но в IE8 (не пробовал IE7) не получается.

Код jQuery:

$('.to-step-2').click(function(){
  var d = new Date();
  var roomShape;
  blnError = false;
  $.ajax({
    url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
    async: false,
    type: 'post',
    cache: false,
    dataType: 'html',
    success: function(data){
      if(data.substring(0,5) == 'Error'){
        alert('Please select a room shape to continue');
        blnError = true;
      }else{
        roomShape = data;
      }
    },
    error: function(jqXHR, textStatus, errorThrown){
      alert('Error 6: jqXHR = ' + jqXHR + '\ntextStatus = ' + textStatus + '\nerrorThrown = ' + errorThrown);
      blnError = true;
    }
  });    
  if (blnError == true){
    return false;
  }

Ошибка, которая выдается только в IE8, гласит:

Error 6: jqXHR = [object Object]
textStatus = error
errorThrown = Length Required

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

Кто-нибудь может понять, почему это происходит, и предложить исправить?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

В соответствии с ошибкой: errorThrown = Необходимая длина , попробуйте добавить фиктивные данные, например:


$.ajax({
    url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
    async: false,
    type: 'post',
    cache: false,
    dataType: 'html',
    data: {},
    .....

Надеюсь, что это работает

3 голосов
/ 27 января 2012

Вы получаете 411 ответ от вашего сервиса:

411 Необходимая длина

Сервер отказывается принять запрос без определенного Контента-Длина.Клиент МОЖЕТ повторить запрос, если он добавляет действительное поле заголовка Content-Length, содержащее длину тела сообщения в сообщении запроса.

Это потому, что jQuery не устанавливает заголовок длины содержимого при публикации, если данных нет.Это требование безопасности при публикации в IIS:

Основная проблема заключается в том, что для большинства установок IIS6 + требуется, чтобы длина содержимого предоставлялась во всех запросах POST, даже если содержимое отсутствует (данные POST).

Длина содержимого для запроса без данных должна быть 0, но jQuery не устанавливает этот заголовок автоматически, если нет параметра данных.Поскольку сериализованным службам JSON ASP.NET AJAX требуется запрос POST, это становится камнем преткновения для запросов только для чтения.

(Цитируется из http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/)

Простая установка данныхПараметр для пустых объектов кажется самым простым обходным путем:

$.ajax({
url: '/base/RoomBuilder/GetRoomShape.aspx?_='+d.getTime(),
async: false,
type: 'post',
cache: false,
data: "{}",
dataType: 'html',
success: function(data){
  if(data.substring(0,5) == 'Error'){
    alert('Please select a room shape to continue');
    blnError = true;
  }else{
    roomShape = data;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...