Проблема jquery .ajax (или .eval) в IE - PullRequest
0 голосов
/ 14 февраля 2011

Надеюсь, кто-нибудь сможет пролить свет на эту проблему для меня.

У меня есть небольшое приложение (http://www.bentinckfencing.co.uk/fence_calculator.php)

У меня есть php-файл, который отправляет обратно закодированную строку JSON.

Я использую jQuery для извлечения этой строки с помощью функции * 1008. * После того, как у меня есть строка JSON, я затем использую eval() таким образом

$.ajax({
   type: "POST",
   url: "ajax-test.php",
   cache: false,
   data: "choice=34",
   success: function(data){

       var myObject = eval('(' + data + ')');

       //Now I set lots of variables in this manner and use them later in the script

       var productName  = myObject[0]['name'];
       var productPrice = myObject[0]['price'];                                     
       var productID    = myObject[0]['id'];

        }
   });

Как всегда, это работает хорошово всех браузерах, кроме IE, который выдает ошибку object doesn't support this property or method

Я просто не могу понять, где я иду не так ... Если у кого-то есть время, чтобы помочь, или даже проверить мое приложение, я 'Мне было бы очень полезно:)

edit Я обнаружил, что вызов Ajax успешно извлекает данные в IE.Это строка, подобная этой [{"name":" 12 inch Rock Face Gravel Board","ID":"106","price":"7.00"},{"name":" 12 inch Double Sided Gravel Board","ID":"108","price":"10.50"},{"name":" 12 inch Smooth Gravel Boards","ID":"109","price":"7.00"}]

Так что теперь моя проблема заключается в том, как мне обрабатывать данные теперь, когда JS имеет их ... Любые идеи были бы хороши :)

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

Не используйте eval, это зло. Также убедитесь, что ваш сервер отправляет правильный тип контента (application / json):

$.ajax({
    type: 'POST',
    url: 'ajax-test.php',
    cache: false,
    data: { choice: 34 },
    dataType: 'json',
    success: function(items) {
        // TODO: some range checking on this array won't be useless
        // before trying to access its elements

        var productName = items[0].name;
        var productPrice = item[0].price;
        var productID = items[0].ID;

        // TODO: do something useful with those variables
    }
});

Также вам, вероятно, не нужен cache: false с запросом POST. Вероятно, это те рефлексы, которые вы получили от запросов IE и GET: -)

0 голосов
/ 14 февраля 2011

Эта строка:

   var productID    = myObject[0]['id'];

должно быть:

   var productID    = myObject[0]['ID'];

Идентификаторы Javascript чувствительны к регистру.

...