jQuery(function() {
var emailAddress = jQuery('#email_address');
emailAddress.on("change", function () {
var mail=emailAddress.val();
jQuery.ajax({
type: "POST",
url: "/customer/email/",
dataType: "json",
data: {email: mail},
success: function (exist) {
if (exist == 1) {
alert("exist");
} else if (exist == 0) {
alert("exist");
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Error " + jqXHR.status + " " + jqXHR.statusText);
}
});
});
});
控制器email.php
public function execute()
{
$customerEmail=$this->getRequest()->getParam('email');
$objectManager=\Magento\Framework\App\ObjectManager::getInstance();
$CustomerModel = $objectManager->create('Magento\Customer\Model\Customer');
$CustomerModel->setWebsiteId(1);
$CustomerModel->loadByEmail($customerEmail);
$userId = $CustomerModel->getId();
if ($userId) {
return 1;
} else {
return 0;
}
我想在使用Ajax单击“创建帐户”按钮之前先检查电子邮件,但我不能这样做,请先帮助我解决此问题。
答案 0 :(得分:0)
似乎在您尝试验证电子邮件地址,因为客户输入了他的电子邮件地址。为此,您只需要在电子邮件地址字段中进行较小的更改即可。
<input type="email" name="email" id="email_address" autocomplete="off" value="<?php echo $block->escapeHtml($block->getFormData()->getEmail()) ?>" title="<?php /* @escapeNotVerified */ echo __('Email') ?>" class="input-text" data-validate="{required:true, 'validate-email':true, 'remote':'<?php echo $this->getUrl('customcustomer/index/uniqueemail', ['_secure' => true]); ?>'}"/>
创建一个控制器,然后在execute方法中添加逻辑。
<?php
namespace Gaurav\CustomCustomer\Controller\Index;
use Magento\Framework\App\Action\Action;
class Uniqueemail extends Action
{
/**
* @var \Magento\Framework\Controller\Result\JsonFactory
*/
protected $resultJsonFactory;
/**
* @var \Magento\Customer\Model\Customer
*/
protected $_customerModel;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
\Magento\Customer\Model\Customer $customerModel
) {
$this->resultJsonFactory = $resultJsonFactory;
$this->_customerModel = $customerModel;
parent::__construct($context);
}
public function execute()
{
$resultJson = $this->resultJsonFactory->create();
$email = $this->getRequest()->getParam('email');
$customerData = $this->_customerModel->getCollection()
->addFieldToFilter('email', $email);
if(!count($customerData)) {
$resultJson->setData('true');
} else {
$resultJson->setData('That email is already taken, try another one');
}
return $resultJson;
}
}
希望对您有帮助。