В настоящее время я разрабатываю приложение, которое позволяет пользователям отправлять электронные письма одним нажатием кнопки, будь то отдельное электронное письмо для отдельного человека или все контакты.
Я застрял в том, как связать AJAX с единственной кнопкой отправки и файлом PHPMailer.
Здесь находится кнопка «Отправить одиночный»:
<script type = "text/ng-template" id = "display">
<td>{{data.customer_name}}</td>
<td>{{data.customer_email}}</td>
<td>
<input type = "checkbox" name = "single_select" class = "single_select" />
</td>
<td>
<button type = "button" class = "btn btn-info btn-sm email_button" ng-click = "sendData(data.customer_name)">Send Single</button>
</td>
<td>
<button type = "button" class = "btn btn-primary btn-sm" ng-click = "showEdit(data)">Edit</button>
<button type = "button" class = "btn btn-danger btn-sm" ng-click = "deleteData(data.id)">Delete</button>
</td>
</script>
<script type = "text/ng-template" id = "edit">
<td><input type = "text" ng-model = "formData.customer_name" class = "form-control" /></td>
<td><input type = "text" ng-model = "formData.customer_email" class = "form-control" /></td>
<td></td>
<td></td>
<td>
<input type = "hidden" ng-model = "formData.data.id" />
<button type = "button" class = "btn btn-info btn-sm" ng-click = "editData()">Save</button>
<button type = "button" class = "btn btn-default btn-sm" ng-click = "reset()">Cancel</button>
</td>
</script>
Я попытался отредактировать то, что делает кнопка удаления, чтобы разрешить отправку, но не смог.
$scope.sendData = function sendData(){
if (confirm("Are you sure you want to send?"))
{
$http({
method:"POST",
url:"send_mail.php",
}).success(function(data){
$scope.success = true;
$scope.successMessage = data.message;
$scope.fetchData();
});
}
}
Вот как сейчас выглядит приложение, ссылка ниже:
Изображение текущего приложения
РЕДАКТИРОВАТЬ
HTML-код электронного письма находится в файле PHPMailer, мне не нужно обрабатывать его через форму.
ОРИГИНАЛЬНАЯ РАБОЧАЯ ВЕРСИЯ
PHP
<?php
$count = 0;
foreach($result as $row)
{
$count++;
echo '
<tr id = "index_table">
<td>'.$row["customer_name"].'</td>
<td>'.$row["customer_email"].'</td>
<td>
<input type = "checkbox" name = "single_select" class = "single_select" data-email = "'.$row["customer_email"].'" data-name = "'.$row["customer_name"].'" />
</td>
<td><button type = "button" name = "email_button" class = "btn btn-info btn-xs email_button" id = "'.$count.'" data-email = "'.$row["customer_email"].'" data-name = "'.$row["customer_name"].'" data-action = "single">Send Single</button></td>
</td>
<td></td>
<td><a href = "delete.php?id=<?php echo escape($row["customer_id"]); ?>"><button type = "button" name = "delete" id = "delete" data-row = "row"+count+"" class = "btn btn-danger btn-xs delete">DELETE</button></a></td>
</tr>
';
}
?>
AJAX (не понравился кодовый блок)
$.ajax({ url:"send_mail.php", method:"POST", data:{email_data:email_data}, beforeSend:function(){ $('#'+id).html('Sending...'); $('#'+id).addClass('btn-danger'); }, success:function(data){ if (data = 'ok') { $('#'+id).text('Success'); $('#'+id).removeClass('btn-danger'); $('#'+id).removeClass('btn-info'); $('#'+id).addClass('btn-success'); } else { $('#'+id).text(data); } $('#'+id).attr('disabled', false); } }); }); });
Спасибо всем :)
Да, но надеялся, что кто-то из сообщества PHPMailer сможет помочь. Кто-то мог поступить точно так же, как я. Но пока уберу :)
Поскольку речь идет не о PHPMailer, а об angular, вам следует включить только эту часть. Когда вы начнете работать и обнаружите, что у вас возникли проблемы с PHP и PHPMailer, вам следует задать о них отдельные вопросы. Важно, чтобы вопросы были минимальными и по возможности.
Хороший крик, спасибо, Магнус. Пока вы здесь, есть идеи по поводу вышеизложенного?
К сожалению, я лучше разбираюсь в PHP, чем в angular.



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


Здесь вы отправляете параметр, а в функции вы не получили
<button type = "button" class = "btn btn-info btn-sm email_button" ng-click = "sendData(data.customer_name)">Send Single</button>
обходной путь
$scope.sendData = function sendData(para){
Привет, Shokry, спасибо за помощь. Все еще не работает, поэтому я разместил весь код в PasteBin pastebin.com/g2c8SQ6p. Извините, я новичок в Ajax и PHP.
проверьте xhr в браузере, я хочу знать, в чем ошибка?
В Angualr Js вы должны передать параметр в скрипт PHP. Я предполагаю, что вы не передаете значение PHP.
var Indata = {param:'val1',.....}
$scope.sendData = function sendData(){
if (confirm("Are you sure you want to send?"))
{
$http({
method:"POST",
url:"send_mail.php",
params: Indata
}).success(function(data){
$scope.success = true;
$scope.successMessage = data.message;
$scope.fetchData();
});
}
}
Попробуйте этот метод,
Если вы все еще сталкиваетесь с проблемой, я думаю, что лучше, если вы поделитесь своим кодом PHP здесь ...
Привет, Сивапракаш! Только что попробовал ваше решение, но, к сожалению, теперь просто работает с {{successmessage}} и не отображает никаких данных из базы данных. Видите ли, у меня изначально это работало, но в моих глазах это был странный формат. Я вставлю это в сообщение о текущем выпуске.
Кажется, все еще параметры не добавлены внутри HTTP-запроса и рядом с разделом URL. Убедитесь, что путь к файлу PHP правильный или нет.
Собственно вопрос: "Как сделать запрос ajax при нажатии кнопки в угловом"? Если да, то вам следует обновить свой вопрос, чтобы прояснить это (и, вероятно, удалить все ссылки на PHP и PHPMailer, поскольку они не имеют отношения к реальной проблеме). Если нет, то вопрос очень непонятный.