使用ajax原型检查客户电子邮件已存在于magento中

时间:2014-05-04 10:10:51

标签: ajax validation magento prototype

我想检查客户电子邮件是否已经存在或未使用ajax原型。我尝试了很多东西,但它没有用。我像这样编写代码。

<script type="text/javascript">
        //<![CDATA[
            var dataForm = new VarienForm('form-validate', true);
            Validation.add('validate-emaila', 'Email already exist', function(v) {
    var url = '/customer/account/checkEmail/email?email=' + encodeURIComponent(v);
    var ok = false;
    new Ajax.Request(url, {
        method: 'get',
        asynchronous: false,
        onSuccess: function(transport) {
        alert(transport.responseText);
            var obj = response = eval('(' + transport.responseText + ')');
            validateTrueEmailMsg = obj.status_desc;
            if (obj.ok === false) {
                Validation.get('validate-email').error = validateTrueEmailMsg;
                ok = false;
            } else {
                ok = true; /* return true or false */
            }
        },
        onFailure: function(){ alert('something wrong') },
        onComplete: function() {
            if ($('advice-validate-email-email')) {
                $('advice-validate-email-email').remove();
            }
            if ($('advice-validate-email-email_address')) {
                $('advice-validate-email-email_address').remove();
            }
            if ($('advice-validate-email-billing:email')) {
                $('advice-validate-email-billing:email').remove();
            }
            if ($('advice-validate-email-shipping:email')) {
                $('advice-validate-email-shipping:email').remove();
            }
            if ($('advice-validate-email-_accountemail')) {
                $('advice-validate-email-_accountemail').remove();
            }
        }
    });
    return ok;
});

        //]]>
        </script>

我在customer / accountcontroller中调用了一个函数

public function checkEmailAction()
    {
      $bool = 0;
      $email = $this->getRequest()->getParam('email');
      $customer = Mage::getModel('customer/customer');
      $customer->loadByEmail($email);
      if ($customer->getId()) {
      $bool = 1;
      }



$jsonStatus = 200;

$info =  array( "status" => $bool);

$this->getResponse()->setBody(json_encode($info))->setHttpResponseCode($jsonStatus)->setHeader('Content-type', 'application/json', true);

return $this;
    }

我从php函数得到错误的响应。它正在返回整页HTML。而不是0或1。 我尝试了很多东西,但给出了相同的回应。任何人都可以告诉我这有什么问题吗?

1 个答案:

答案 0 :(得分:1)

检查客户是错误的代码。您需要将网站ID添加到客户负载

首先需要将客户检查网址从客户accountcontroller.php更改为结帐onepagecontroller.php。因为magento不能轻易添加到accountcontroller.php

url ='<?php echo $this->getUrl('checkout/onepage/checkEmail', array('_secure'=>true)); ?>'
    var request = new Ajax.Request(
        url,
        {
            method:'get',
              parameters: {email:encodeURIComponent(v)}
            onSuccess: function(transport)
            {
             if(transport.status == 200)
             {
                   var data = transport.responseText.evalJSON();
                   if(data.success==true){

                   }
            }
          }

        }
    );

在结帐时onepagecontroller.php添加以下代码

   public function forcecheckAction()
    {
    $response=array();
    $email = $this->getRequest()->getParam('email');

    try{
    $customer = Mage::getModel("customer/customer");
    $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
    $customer->loadByEmail($email); //load customer by email i 
        /* if customer has ,then login */
        if($customer->getId()>0){

        $response['success'] = true;
        }else{
            $response['success'] = false;
        }
    }catch(Exception $e)
    {
    $response['success'] = false;
    $response['message'] = $e->getMessage();
    }
        $this->getResponse()->setBody(Zend_Json::encode($response));
    }