2012-07-03 22 views
1

我試圖使用Json.Json訪問Magento之外的Magento會話數據在IE中工作正常,但是當我試圖使用JSON訪問Magento會話數據時,它不起作用。 代碼在FF,鉻,歌劇..但不是在IE 7Magento會話使用Json不在IE中工作

這裏是我的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

我建議檢查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)).');' 
    ); 
} 
+0

我試過但沒有luck.btw ie.php和client.html都在不同的服務器上。 – ahsan

+0

應該沒有區別,只要存在cookie即可。您是否嘗試過將調用JS作爲Magento服務器的外部參數? – Vinai

+0

它的cookie「隱私政策」問題。默認IE阻止其他服務器的cookie。如果我更改設置(啓用複選框「始終允許此網站使用cookie」),那麼它在IE中工作。你說什麼? – ahsan

0

有一個在IE瀏覽器的實現的WinInet的錯誤。如果你有一個包含文件名的路徑的cookie,IE不會通過Javascript中的document.cookies屬性使它可用。這樣的cookie應該被傳送到服務器。