У меня есть переменная 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. И причина, по которой я не могу передать ее напрямую, заключается в том, что эта переменная зависит от того, какая кнопка нажата.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Измените 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.
Да, это нормально. Вот почему я не вставил это в ответ.
Но чего я не понимаю, так это того, как это переводится в email в функции javascript?
Когда вы пишете searchEmail('[email protected]'), значение email становится этим аргументом.
Возможно, вам нужно прочитать учебник о том, как работают функции. Это в основном то же самое во всех языках программирования.
Значит, $author_email не нужно называть $email? Поскольку я не могу заставить его работать, я попытался поместить $_POST['email']; в $subject, чтобы проверить его, и он отправляет электронное письмо без темы, значит, где-то есть проблема?
Вы изменили параметр data: в вызове AJAX, как я показал?
Извините, это была моя опечатка! Получил работу. Спасибо, что все объяснили!
Если я хочу передать больше переменных, как это сделать? Можете ли вы echo добавить несколько javascript?
Конечно, нет никакой разницы. onclick = "funcname('<?php echo $varone;?>', '<?php echo $vartwo;?>')"
Вам нужно заменить новые строки буквальными \n escape-последовательностями.
Если бы вы делали это в блоке <script>, я бы предложил <?php echo json_encode($phpvariable);. Но это не будет работать правильно внутри атрибута onclick, потому что цитирование будет неправильным. Возможно, вы можете переместить привязку события к скрипту, используя addEventListener.
onclick = "funcname('<?php echo str_replace("\n", '\n', $varone); ?>')"
Но как PHP-переменная
$author_emailпередается в javascript? Этот способ сделать это правильно?onclick = "searchEmail('<?php echo $author_email?>');"