$ jQuery .ajax Не Работающий в IE8, но это работает над FireFox & Chrome

У меня есть следующий вызов ajax, который работает отлично в Firefox и Chrome, но не IE:

function getAJAXdates( startDate, numberOfNights, opts ) {

    var month   =   startDate.getMonth() + 1;
    var day     =   startDate.getDate();
    var year    =   startDate.getFullYear();
    var d       =   new Date();

    var randNum =   Math.floor(Math.random()*100000000);

    $.ajax({
        type        :   "GET",
        dataType    :   "json",
        url         :   "/availability/ajax/bookings?rand="+randNum,    
        cache       :   false,
        data        :   'month='+month+'&day='+day+'&year='+year+'&nights='+numberOfNights,
        contentType :   'application/json; charset=utf8',
        success     :   function(data) {
            console.log('@data: '+data);
            insertCellData(data, opts, startDate);
        },
        error:function(xhr, status, errorThrown) {
            console.log('@Error: '+errorThrown);
            console.log('@Status: '+status);
            console.log('@Status Text: '+xhr.statusText);
        }
    });
}

Я знаю для того, что все переменные передают правильное содержание, и $ .ajax действительно передает всю парамать/значения.

Это - то, что я вхожу в ошибку:

ЖУРНАЛ: @Error: неопределенный ЖУРНАЛ: @Status: ЖУРНАЛ parsererror: текст @Status: хорошо

Я знаю о проблеме кэша о IE и реализовал случайную парамать для разрешения его.

Вот JSON, который я возвращаю (я могу видеть, что он использует Charles),

{
   "availability":[
      {
         "inventory_id":"5",
         "booking_id":"21",
         "start_date":"05-01-2010",
         "number_nights":4,
         "text":"deFrancisco, Martin - $500.00 ACTIVE",
         "type":"BOOKING"
      }
   ]
}

Наконец это заголовки, которые передают обратно от бэкенда:

header('Content-Type: application/json; charset=utf8');
header("Cache-Control: no-cache");
header("Expires: 0");
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

Какие-либо идеи?

6
задан Sam3k 27 April 2010 в 14:51
поделиться

5 ответов

Я бы закомментировал contentType и добавил dataType: "json"

из http://api.jquery.com/jQuery. ajax /

dataType: Тип данных, которые вы ожидаете от сервера.

contentType: При отправке данных на сервер используйте этот тип содержимого.

вы указываете, что отправляете json, но это не так - может быть, проблема в этом?

4
ответ дан 17 December 2019 в 02:25
поделиться

В большинстве случаев ошибки синтаксического анализа IE вызваны лишними запятыми. Например, [1, 2, 3,] действителен в FF, но не в IE. В любом случае, вы должны вставить ответ JSON, без этого невозможно определить проблему.

1
ответ дан 17 December 2019 в 02:25
поделиться

Какую версию jQuery вы используете?

Если вы проверите код jquery, при вызове jQuery.httpData () выдается ошибка parsererror. Вот код из jquery:

if ( status === "success" ) {
  // Watch for, and catch, XML document parse errors
  try {
    // process the data (runs the xml through httpData regardless of callback)
    data = jQuery.httpData( xhr, s.dataType, s );
  } catch(err) {
    status = "parsererror";
    errMsg = err;
  }
}

Возможно, стоит взглянуть на jQuery.httpData (). То есть вы можете проверить, вызывается ли jQuery.parseJSON и действительно ли он возвращает объект.

if ( typeof data === "string" ) {
  // Get the JavaScript object, if JSON is used.
  if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
    console.log(data); //add this
    data = jQuery.parseJSON( data );
    console.log("data parsed successfully"); //add this
0
ответ дан 17 December 2019 в 02:25
поделиться

Что если вы просто наберете alert (data); или var myObject = eval ('(' + data + ')'); ?

И если вы позвоните функция прямо из браузера, набрав в строке URL-адреса ваш вызов ajax со всеми параметрами в "get" (& param1 = param1value & param2 = ...)? Вы должны уметь прочитать ответ.

Что-то в ответе JSON сводит IE с ума.

0
ответ дан 17 December 2019 в 02:25
поделиться

Проверьте, не возвращается ли ваша страница ОК или, если он возвращает «ОК» . Только «ОК» является допустимым JSON. Используйте такой инструмент, как JSONLint , чтобы проверить значение, полученное в результате запроса.

0
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: