Передать переменную PHP в Javascript и обратно в PHP?

У меня есть переменная PHP с именем $author_email, которую я хочу передать функции Javascript, которую я вызываю через HTML при нажатии кнопкиonclick = "searchEmail();" Могу ли я передать переменную в Javascript, но сделать это вместо этого? onclick = "searchEmail('<?php echo $author_email?>');"

Затем я хочу использовать это в своей функции javascript, чтобы передать ее функции PHP, которую она вызывает через AJAX.

Это функция Javascript searchEmail:

function searchEmail() {
  var admin_url = admin_ajax.ajaxurl;
  $.ajax({
    type: "POST",
    url: admin_url,
    datatype: "html",
    data: {'action': 'search_notify_email'},
    success: function() {
      searchNotification();
    },error:function() {
      searchNotificationError();
    }
  });
}

JavaScript запускает функцию PHP search_notify_email Теперь я хочу передать переменную функции PHP. Как это делается? Что выглядит так:

function search_notify_email(){
    $to = $author_email;
    $subject = "Test title";
    $message = "message message message message message message message ";
    $headers[] = 'From: Test <[email protected]>';

    if ( wp_mail($to, $subject, $message, $headers) ){
      // Success
    } else {
      // Error
    }
    die();
}
add_action('wp_ajax_nopriv_search_notify_email', 'search_notify_email');
add_action('wp_ajax_search_notify_emaill', 'search_notify_email');

Как видите, моя цель — использовать $author_email в последней функции PHP. И причина, по которой я не могу передать ее напрямую, заключается в том, что эта переменная зависит от того, какая кнопка нажата.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените searchEmail, чтобы использовать параметр:

function searchEmail(email) {
  var admin_url = admin_ajax.ajaxurl;
  $.ajax({
    type: "POST",
    url: admin_url,
    datatype: "html",
    data: {'action': 'search_notify_email', email: email},
    success: function() {
      searchNotification();
    },error:function() {
      searchNotificationError();
    }
  });
}

Затем измените контроллер, чтобы использовать этот параметр.

function search_notify_email(){
    $to = $_POST['email'];
    $subject = "Test title";
    $message = "message message message message message message message ";
    $headers[] = 'From: Test <[email protected]>';

    if ( wp_mail($to, $subject, $message, $headers) ){
      // Success
    } else {
      // Error
    }
    die();
}

Вероятно, есть более WordPress-способ получить параметр, но я не знаком с WordPress.

Но как PHP-переменная $author_email передается в javascript? Этот способ сделать это правильно? onclick = "searchEmail('<?php echo $author_email?>');"

joq3 14.02.2019 11:19

Да, это нормально. Вот почему я не вставил это в ответ.

Barmar 14.02.2019 11:20

Но чего я не понимаю, так это того, как это переводится в email в функции javascript?

joq3 14.02.2019 11:21

Когда вы пишете searchEmail('[email protected]'), значение email становится этим аргументом.

Barmar 14.02.2019 11:22

Возможно, вам нужно прочитать учебник о том, как работают функции. Это в основном то же самое во всех языках программирования.

Barmar 14.02.2019 11:23

Значит, $author_email не нужно называть $email? Поскольку я не могу заставить его работать, я попытался поместить $_POST['email']; в $subject, чтобы проверить его, и он отправляет электронное письмо без темы, значит, где-то есть проблема?

joq3 14.02.2019 11:25

Вы изменили параметр data: в вызове AJAX, как я показал?

Barmar 14.02.2019 11:26

Извините, это была моя опечатка! Получил работу. Спасибо, что все объяснили!

joq3 14.02.2019 11:26

Если я хочу передать больше переменных, как это сделать? Можете ли вы echo добавить несколько javascript?

joq3 14.02.2019 11:28

Конечно, нет никакой разницы. onclick = "funcname('<?php echo $varone;?>', '<?php echo $vartwo;?>')"

Barmar 14.02.2019 11:31

Вам нужно заменить новые строки буквальными \n escape-последовательностями.

Barmar 14.02.2019 12:39

Если бы вы делали это в блоке <script>, я бы предложил <?php echo json_encode($phpvariable);. Но это не будет работать правильно внутри атрибута onclick, потому что цитирование будет неправильным. Возможно, вы можете переместить привязку события к скрипту, используя addEventListener.

Barmar 14.02.2019 12:41
onclick = "funcname('<?php echo str_replace("\n", '\n', $varone); ?>')"
Barmar 14.02.2019 12:42

Другие вопросы по теме

Когда я ввожу доменное имя http://oj.mbstu.ac.bd в браузер, затем он перенаправляет на IP http://103.28.121.75/index.do почему?
Ввод контактной формы исчезает и исчезает
Как рассчитать общую сумму для особых дней и обычных дней на основе поиска по дате и времени
Как получить файл с ftp-сервера и скопировать на свой сервер
Как я могу частично заменить str_replace в PHP в динамической строке с неизвестным содержимым ключа
Laravel5: как отключить сообщение планировщика по умолчанию, если ни одна команда не готова к запуску
Как использовать теги электронной почты (для отслеживания электронных писем) в мандриле с использованием php
Проверьте, является ли значение в поле ввода URL-адресом Instagram в blade.php
Получение самого низкого и самого высокого значения в массиве PHP не показывает мне правильные числа
Разделить строку из значения массива и добавить этот разделенный массив в тот же основной массив