IE中的jquery .ajax(或.eval)问题

时间:2011-02-13 21:20:04

标签: jquery json object eval

希望有人可以为我解决这个问题。

我有一个APP(http://www.bentinckfencing.co.uk/fence_calculator.php)

我有一个发送JSON编码字符串的php文件。

我正在使用jQuery使用.ajax()函数检索此字符串。在我拥有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 个答案:

答案 0 :(得分:1)

不要使用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请求得到的反应: - )

答案 1 :(得分:0)

这一行:

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

应该是:

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

Javascript标识符区分大小写。