使用Json的Magento会话不在IE中工作

时间:2012-07-03 04:06:10

标签: json session magento

我试图使用Json.Json在Magento外部访问Magento会话数据在IE中工作正常但是当我尝试使用json访问Magento会话数据时它不起作用。 代码适用于FF,Chrome,Opera ..但不适用于IE 7

这是我的server.php文件

<?php
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::app();

 if(isset($_GET['cart_item'])){

    Mage::getSingleton('core/session', array('name'=>'frontend'));
    $_cartQty=0;
    $_cartItem='My Bag is empty';

    foreach (Mage::helper('checkout/cart')->getCart()->getItems() as $item){
        $_cartQty+=$item->getQty();
    }

    if ($_cartQty>0)
        $_cartItem='My Bag ('. $_cartQty.')';



    echo $_GET['callback'] . '('.json_encode(array('response'=>$_cartItem)).');';
}
?>

这是我的client.html文件

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">

function change_cart_item(){

var cartItemUrl=jQuery('#cart_item_url').val();

    jQuery.getJSON(cartItemUrl, function(json) {
        var result=json.response;
        alert(result);
        //var cartItem = jQuery(result).find('#cart_item').html();
        //jQuery("#show_cart span").html(result);               
    });
return false;
}


</script>

<input id="cart_item_url" name="cart_item_url" type="hidden" value="http://test.com/ie.php?callback=?&cart_item=cart_item" />

<input type="button" onclick="change_cart_item()"  value="Change cart item" />

上面的代码总是在IE中返回“我的包是空的”。

2 个答案:

答案 0 :(得分:2)

我建议检查为什么IE不会将Cookie标头发送到/ie.php脚本。 IE必须以某种方式不同地评估cookie路径值 作为一种解决方法,尝试实现一个简单地返回JSON的常规Magento动作控制器,因为它必然会通过IE接收cookie标头(否则Magento的整个商店前端将无法与IE一起使用)。
要从动作控制器返回JSON,请使用:

public function jsonAction()
{
    $_cartItem = 'My Bag is empty';
    $_cartQty = Mage::helper('checkout/cart')->getItemsQty();

    if ($_cartQty > 0) {
        $_cartItem = 'My Bag ('. $_cartQty.')';
    }

    $this->getResponse()->setBody(
        $_GET['callback'] . '(' . Mage::helper('core')->jsonEncode(array('response'=>$_cartItem)).');'
    );
}

答案 1 :(得分:0)

IE的WinInet实现存在一个错误。如果你的cookie中有一个带有文件名的路径,IE将无法通过Javascript中的document.cookies属性使其可用。这样的cookie应该传送到服务器。