通过ajax添加到wishlist的Magento无法使用安全URL(已安装SSL)

时间:2013-09-19 06:26:59

标签: magento

我使用magento通过ajax添加到心愿单 它工作正常,但在服务器上安装SSL后,从管理员处制作安全的magento结账页面。 它没有给我任何来自ajax(302 Found)的回复。

但是,如果我在新标签中打开此网址,那么它的工作正常。 当我在请求URL中使用https时,它会给我以下html响应“重新加载页面以获取源:REQUEST URL”而没有https则没有响应显示。

这里是我用于的代码: -

function additemtowishlist(wId,pId)
{
    var wishlisturl = 'wishlist/index/ajaxadd/product/'+pId;
    var wishlistparam = '/?wishlist_id='+wId;
    var url = '<?php echo Mage::getUrl("",array('_secure'=>false))?>'+wishlisturl+wishlistparam;
    new Ajax.Request(url, {
        dataType: "json",
        onSuccess: function(response){
            if (typeof(response.responseText) == 'string') eval('data = ' + response.responseText); 
            if (typeof data.product_id != 'undefined') {
                var htmltoshow = '<div class="messages successmessage"><div class="success-msg"><span>'+data.message+'</div></div>';
                jQuery("#wishlistresulthome-"+data.product_id).html(htmltoshow);
                jQuery("#customwishlist-"+data.product_id).css('visibility','hidden');
            }
            else {
                 alert(Translator.translate('Error happened while creating wishlist. Please try again later'));
            }
        }
    });
}

提前致谢。

4 个答案:

答案 0 :(得分:1)

Hello Simranjeet你可以试试这个: -

function additemtowishlist(wId,pId)
{
    var wishlisturl = 'wishlist/index/ajaxadd/product/'+pId;
    var wishlistparam = '/?wishlist_id='+wId;
    var url = '<?php echo Mage::getUrl("",array('_secure'=>false))?>wishlist/index/ajaxadd/product/';
    new Ajax.Request(url, {
        method: 'post',
        parameters: {'wishlist_id':wId,'product_id':pId },
        onSuccess: function(response){
            if (typeof(response.responseText) == 'string') eval('data = ' + response.responseText); 
            if (typeof data.product_id != 'undefined') {
                var htmltoshow = '<div class="messages successmessage"><div class="success-msg"><span>'+data.message+'</div></div>';
                jQuery("#wishlistresulthome-"+data.product_id).html(htmltoshow);
                jQuery("#customwishlist-"+data.product_id).css('visibility','hidden');
            }
            else {
                 alert(Translator.translate('Error happened while creating wishlist. Please try again later'));
            }
        }
    });
}

答案 1 :(得分:1)

我发现ajaxToCart内置了ssl功能,但是如果主题开发人员很懒,他们可能忽略了包含告诉ajaxToCart启用ssl的代码。我在ajax_cart_super.js的以下代码中找到了它。

function ajaxToCart(url,data,mine) {
    var using_ssl = $jq('.using_ssl').attr('value');
    if(using_ssl==1) { 
        url = url.replace("http://", "https://");
    }
..
..
}

正如您所看到的,ajaxToCart将使用https替换http,但仅当存在类using_ssl且value = 1的元素时。制作我的主题的开发人员没有包含该元素,所以当ajax请求指向一个应该是安全的不安全页面时,ajax响应不会在jquery中工作。

所以对我来说,快速修复只是将这个元素添加到我的页面上。我知道这个网站将始终启用ssl,所以我只需将其硬编码到我的模板中,如下所示。

<input type="hidden" class="using_ssl" value="1" />

一旦那样,javascript就会获得价值并进行替换。所以现在只需将其添加到模板中就可以了。如果您是主题开发人员,并且希望用户能够打开和关闭此功能,您可能需要检查管理员中的设置。虽然您可能位于不安全的页面上,但它会告诉您后端是否启用了ssl,这将需要添加此修复程序。

我还没有对以下内容进行测试,但我认为它看起来像这样......

if(Mage::app()->getStore()->isCurrentlySecure()){
    echo '<input type="hidden" class="using_ssl" value="1" />';
}
顺便说一下,经过多年对stackoverflow解决方案的认可,我在这里发表了我的第一篇文章。感谢所有贡献者,帮助很大,我现在会尝试偿还。 :)

答案 2 :(得分:0)

尝试通过将_secure设置为true来更新您的javascript url变量。

答案 3 :(得分:0)

请尝试使用您的愿望清单url,而不是我的自定义操作

Mage::getUrl('',array('_secure'=>true))

我认为这会让你成为基本的安全网址。我相信。

Mage::getUrl('customer/account/login',array('_secure'=>true))

将进入登录页面。换句话说,

Mage::getUrl('module/controller/action',array('_secure'=>true))