Почему так много проблем с IE и Ajax? - PullRequest
2 голосов
/ 01 декабря 2010
$.ajax({
  type: 'POST',
  url: URL +'/foo/',
  data: {'pass': pass},
  dataType: "json",
  jsonp:'jsonp_callback',
  success: function(data) {
    if (data["success"] === "false") {
      $("#password").val("");
      $('.error-message').removeClass('hide')
      $('.error-message').addClass('show')
    }
    else {
      var tempUrl="http://10.0.1.101:9000/bar/"
      location.href=tempUrl;
    }
  },
});
return false

Это нормально работает в Mozilla, Chrome, Safari. Но не в IE. Что может быть причиной. Я возвращаю успешное значение с сервера. Если успех равен True, он будет перенаправлен на tempUrl. Но ничего не происходит здесь, в IE. Похоже, что ajax вообще не работает в IE.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

Вы столкнулись с проблемой "висячей запятой" (запятой после закрывающего } вашего параметра success).IE не любит висячие запятые в объектных литералах, он обрабатывает их как синтаксические ошибки, и ваш скрипт умирает.(Это не ошибка IE, это разумная интерпретация более ранней спецификации; однако, новейшая спецификация, в частности, допускает запятую, и это исправлено в IE8.) Не по теме: IE имеет похожую, но другую, проблема с висячими запятыми в литералах массива (который все еще в IE8).

Подробнее об обоих isuses эта статья , но в основном:

$.ajax({
  type: 'POST',
  url: URL +'/foo/',
  data: {'pass': pass},
  dataType: "json",
  jsonp:'jsonp_callback',
  success: function(data) {
    if (data["success"] === "false") {
      $("#password").val("");
      $('.error-message').removeClass('hide')   // <== Strongly recommend ; here
      $('.error-message').addClass('show')      // <== Another ; here
    }
    else {
      var tempUrl="http://10.0.1.101:9000/bar/" // <== Another ; here
      location.href=tempUrl;
    }
  }, // <== This comma is the problem
});
return false                                    // <== Another ; here

Смотрите записку в нижней части.Уберите запятую и все будет в порядке.Вещи улучшаются (как описано в связанной статье выше), но для максимальной совместимости в дикой природе, вы должны наблюдать это некоторое время дольше.

(Другие заметки не по теме, но, опять же, сильнорекомендуем также исправить их, никогда не полагаться на вставку точек с запятой.)

0 голосов
/ 01 декабря 2010

Вы должны добавить точку с запятой в конце этих строк:

$('.error-message').removeClass('hide')
$('.error-message').addClass('show')
var tempUrl="http://10.0.1.101:9000/bar/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...