$ .getJSON (jQuery) не работает в IE 8 - PullRequest
3 голосов
/ 01 июля 2010

Существует несколько простых кодов AJAX, которые работают в Firefox и Chrome, но не в IE.Я не делаю ничего необычного, но код слишком длинный, чтобы публиковать здесь.

По сути, это:

<script type="text/javascript">
var baseurl = 'http://mydomain.com/facebook/';
 var setUpGame = function(lvl){
  var ajaxurl;
  ajaxurl = baseurl+'ajax.php?f=gg&l='+lvl;
  $.getJSON(ajaxurl,function(data){
                   //do stuff with data here
  });
 };
 $(document).ready(function(){
  setUpGame(3);
 });
</script>  

Проблема в том, что IE имеет проблему с $ .getJSON.Стек вызовов показывает, что он выходит из строя в недрах jQuery (строка 123, столбец 183), где код jQuery читает «return new A.XMLHttpRequest»

Сообщение об ошибке «Ошибка: объект не поддерживает этосвойство или метод ".Я проверил, что переменная ajaxurl имеет правильное значение и что URL возвращает правильный JSON.

Может ли это произойти, потому что все это выполняется внутри iFrame?

Ответы [ 2 ]

4 голосов
/ 02 июня 2012

Мне потребовались часы, чтобы понять это, так что, надеюсь, я смогу спасти кого-то еще от головной боли.

Как отмечалось в другом месте, IE не использует XMLHttpRequest.

Однако многие решения, размещенные в других местах, не работают для меня.

Я пытался:

  1. jQuery.support.cors = true; Но это, похоже, ничего не делает.

  2. JSONP работал бы, если бы это была одноэлементная функция. Но я работаю внутри относительно сложного объекта, которому нужно несколько экземпляров на одной странице, но обратные вызовы действительно работают только в глобальном пространстве имен, и я сталкиваюсь с коллизиями ... очень уродливыми коллизиями.

  3. $. GetScript не будет работать для меня, потому что мне нужно на самом деле массировать возвращаемые данные json. И хотя dataType «script» не выдает ошибку доступа XDomain, он также не возвращает фактические данные моей функции обратного вызова .success.

  4. $. GetJSON не работает для IE8 - он выдает ошибку «Отказано в доступе». В основном сталкивается с проблемами CORS. И ничто на глобальном уровне, кажется, не помогает.

Итак, я нашел следующие работы:

$.ajax({ 
    url : remote_cross_domain_non_local_url,
    dataType : 'jsonp'
})
.success( function(data){ dosomethingwithdata(data); } );

Это своего рода хак, потому что я указываю тип данных jsonp, хотя в возвращаемых данных нет функции-обертки. Но чтобы обойти проблемы XDomain с IE, мы должны обмануть его, думая, что мы получаем скрипт JSONP.

1 голос
/ 01 июля 2010

Я переключился с jQuery 1.4.2 на 1.3.2, и эта проблема исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...