Ошибка Ajax в IE - PullRequest
       2

Ошибка Ajax в IE

0 голосов
/ 06 декабря 2011

Я звоню ajax.php с помощью jQuery. Он все время возвращает JSON-ответ.

    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        data: 'some=info',
        dataType: 'json',
        success: function(data) {
            if(data != null) {
                console.log(data);
            } else {
                alert('IE fails here!');
            }
        }
    });

Ajax всегда возвращает некоторые данные в формате JSON. Он отлично работает во всех браузерах, кроме IE (проверено на IE 7, 8 и 9). В IE он всегда печатает предупреждение (что означает, что он никогда не получает информацию ответа). Есть идеи?

Обновление 1 : Я только что подтвердил, что сообщение никогда не было успешным в IE, поэтому данные всегда нулевые.

Обновление 2 : сообщение приходит, но возвращает ноль, только когда оно IE.

Обновление 3 (решение) : по моей вине ajax защищал от вызовов с других серверов. В начале он использует оператор if (), который запрашивает хост $ _SERVER ['HTTP_REFERER']] на том же сервере. Теперь возникает вопрос: почему IE не распознает $ _SERVER ['HTTP_REFERER'] в вызове ajax ?

Это код API (php)

    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $security = parse_url($_SERVER['HTTP_REFERER']);
        if(in_array($security['host'],array('localhost','tradukka.com','173.203.198.123'))) {
            header('Content-type: application/json');
            $array = array('nice','data','for','api');
                echo json_encode($translation);
            }
        }
    }

Сбой IE при проверке $ _SERVER ['HTTP_REFERER']: s

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Аякс защищал от звонков с других серверов.В начале он использует оператор if (), который запрашивает хост $ _SERVER ['HTTP_REFERER']] на том же сервере.машины, на которых я тестировал IE, не получили имя хоста;вместо этого он имел значение ip, поэтому всегда выдавал false.

0 голосов
/ 07 декабря 2011

Попробуйте добавить это перед dataType: 'json'.

 beforeSend: function(x) {
  if(x && x.overrideMimeType) {
   x.overrideMimeType("application/j-son;charset=UTF-8");
  }
 },

Так должно выглядеть так:

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: 'some=info',
    beforeSend: function(x) {
     if(x && x.overrideMimeType) {
      x.overrideMimeType("application/j-son;charset=UTF-8");
      }
    },
    dataType: 'json',
    success: function(data) {
        if(data != null) {
            console.log(data);
        } else {
            alert('IE fails here!');
        }
    }
});

Ваш сервер должен отправлять данные в виде Content-Type "* / json". Если этот код не работает, измените заголовки ответа соответствующим образом. Например, отправка «application / json» будет в порядке.

Надеюсь, это поможет. Приветствия.

0 голосов
/ 07 декабря 2011

IE печально известен кешированием ajax-запросов.Попробуйте добавить параметр 'cache: false' в ваш запрос:

$.ajax({
    type: 'POST',
    cache: false,
    url: 'ajax.php',
    data: 'some=info',
    dataType: 'json',
    success: function(data) {
        if(data != null) {
            console.log(data);
        } else {
            alert('IE fails here!');
        }
    }
});

edit Подтвердили ли вы, что нет никаких ошибок javascript?Возможно, если его выбросить, а затем поймать с помощью команды try / catch, он может быть не виден в браузере?

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