Ajax в OpenCart 3 — как?

Пытаюсь сделать редактирование Личных Данных в аккаунте через ajax. В качестве валидатора использую jQuery Validation Plugin.

В контроллере account\edit.php для ajax я добавил:
public function index() {...	

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			$this->model_account_customer->editCustomer($this->customer->getId(), $this->request->post);
			$this->session->data['success'] = $this->language->get('text_success');

		// ajax
		if (isset($this->request->post['ajax'])){
			echo json_encode(array('msg' =>$this->language->get('text_success')));
			return false;
		}
		// ajax


			$this->response->redirect($this->url->link('account/account', '', true));
		}
                // ajax
		if (isset($this->request->post['ajax'])){
			if(count($this->error)){
					echo json_encode($this->error);
					return false;
			}
		}
		// ajax

... 
}

мой код обрамлён // ajax.

а в twig я добавил:
$('#btn-account-edit-popup').on('click', function() {
$.ajax({
		url: '{{ action }}',
		data: $('.account-edit-form').serialize(),
		method: 'post',
		success: function (data) {
			var response = jQuery.parseJSON(data);
			if (response.redirect != undefined) {
				location.href = response.redirect;
			} else {
				$('.alert-danger', $('.account-edit-form')).html(response.warning);
				$('.alert-danger', $('.account-edit-form')).show();
			}
		}
	});
});


т.е. при клике на кнопку #btn-account-edit-popup должен выполняться ajax запрос, но вместо этого страница перезагружается и я получаю белую страницу с надписью в json формате :

{"warning":"\u0414\u0430\u043d\u043d\u044b\u0439 E-Mail \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d!"}

Т.е. ответ я получаю, но как мне в этой ситуации получать ответ по ajax не перезагружая страницу?
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
$('#btn-account-edit-popup').on('click', function(e) {
e.preventDefault();
...

И по уму обработчик вешается на субмит формы, а не на клик кнопки. Почему - подумайте самостоятельно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы