我试图使用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中返回“我的包是空的”。
答案 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应该传送到服务器。