4

我正在通过 ajax 使用 magento 添加到愿望清单,它工作正常,但是在服务器上安装 SSL 并从管理员创建安全的 magento 结帐页面之后。它没有给我任何来自 ajax (302 Found) 的响应。

但是,如果我在新选项卡中打开此 url,那么它工作正常。当我在请求 url 中使用 https 时,它会给我以下 html 响应“重新加载页面以获取源:请求 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

4 回答 4

1

你好 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'));
            }
        }
    });
}
于 2013-09-19T09:36:47.500 回答
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 会将 http 替换为 https,但前提是存在类 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 解决方案的欣赏,我在这里发表了我的第一篇文章。感谢所有贡献者,帮助很大,我现在会尽力回报。:)

于 2014-05-09T16:32:56.310 回答
0

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

于 2013-09-19T06:40:39.847 回答
0

请尝试在下面使用您的愿望清单 url 更改而不是我的自定义操作

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

我认为这可以为您提供基本的安全 URL,我相信。

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

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

Mage::getUrl('module/controller/action',array('_secure'=>true))
于 2013-09-19T07:19:18.350 回答