1

我正在尝试使用 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 中总是返回“我的包是空的”。

4

2 回答 2

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)).');'
    );
}
于 2012-07-03T09:44:36.710 回答
0

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

于 2012-07-06T15:57:45.800 回答