Ошибка отображения предупреждения json_encode с помощью phpmailer

saimita спросил: 12 мая 2018 в 05:08 в: php

У меня есть одна функция в моем jquery-файле, который вставляет данные в базу данных и отправляет одну почту. Это нормально работает без phpmailer, показывая предупреждение, но когда я помещаю предупреждение о генерации кода phpmailer, не работаю (но вставляем в базу данных и отправляем электронную почту), кто-то знает, почему это происходит, и sory для плохого английского, thx для справки.

Обновление: я уже получил уведомление об изменении json_encode для возврата в webservice и изменения предупреждения (ответа); для возврата предупреждения (ответа); по почтовому коду, но нужно поставить предупреждение после закрытия метода post, если не делайте этого, чтобы возвращаемое предупреждение не было, некоторые идеи, почему нужно, чтобы второе предупреждение после сообщения метода получало возврат, thx.

Мой почтовый индекс

$.post('insert',{val: message,name: $("#firstName").val(),desktop_id: $("#desktop_id").val(),permis: $("#permis").val(),phone: $("#phone").val(),mail: $("#mail").val()}, function (response) {
    //feedback
    alert(response);
});

Мой веб-сервис

$app->post('/insert', function(){
require_once('db/dbconnect.php');
$name = $_POST['name'];
$phone= $_POST['phone'];
$phone=(int)$phone;
$mail =$_POST['mail'];
$desktop_id = $_POST['desktop_id'];
$desktop_id=(int)$desktop_id;
$permis=$_POST['permis'];
$date = date("Y-m-d");
$data=array("name"=>$name,"phone"=>$phone,"mail"=>$mail,"desktop_id"=>$desktop_id,"permis"=>$permis,"date"=>$date);
$client=$db->client();
$result = $client->insert($data);
if($result){
$response = 'Success';
}
else{
$response = 'Error';
}
//I remove the variables data
include_once("phpmailer/PHPMailerAutoload.php");$To = $destinatarios;
$Subject = $assunto;
$Message = $value;
$Host = 'mail.'.substr(strstr($usuario, '@'), 1);
$Username = $usuario;
$Password = $senha;
$Port = "587";
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$body = $Message;$mail-> IsSMTP(); // telling the class to use SMTP$mail-> Host = $Host; // SMTP server$mail-> SMTPDebug = 2; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only$mail-> SMTPAuth = true; // enable SMTP authentication$mail-> Port = $Port; // set the SMTP port for the service   server$mail->addAttachment('mpdf/temp/doc.pdf');$mail-> Username = $Username; // account username $mail-> Password = $Password; // account password$mail-> SetFrom($usuario, $nomeDestinatario);
$mail-> Subject = $Subject;
$mail-> MsgHTML($body);
$mail-> AddAddress($To, "");
if(!$mail-> Send())
{
}
else 
{
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
});

1 ответ

Mr Glass ответил: 12 мая 2018 в 05:36

Когда вы устанавливаете $response = 'Error: '. print($mail->ErrorInfo); или $response = 'Success', а затем echo json_encode($response, JSON_UNESCAPED_UNICODE)), похоже, что вы пытаетесь превратить неверно отформатированную строку в JSON.

Synchro ответил: 12 мая 2018 в 05:59
Кроме того, print выводит в браузер, он не возвращает строку. Я подозреваю, что вам нужен оператор конкатенации ., а также его формат как действительный JSON.
saimita ответил: 12 мая 2018 в 06:48
ok, я просто удаляю эту часть phpmailer, чтобы не путать, предупреждение if с ответом var $ не работает больше, когда ставит phpmailer, sory для плохой английской
Mr Glass ответил: 12 мая 2018 в 06:50
Используйте что-то вроде $response = array('Message' => 'Error: ' . $mail->ErrorInfo) для ошибок и $response = array('Message' => 'Success')
saimita ответил: 12 мая 2018 в 07:16
я попробую это tomorow thx, но почему без кода phpmailer там работает, его странный, thx
Mr Glass ответил: 12 мая 2018 в 08:12
Он работает без вызовов json_encode(), потому что то, что вы пытаетесь закодировать, не может быть превращено в действительную строку json.