Мне нужно завершить сценарий и распечатать JSON с некоторым сообщением.У меня есть следующий код:
header('Content-Type: application/json');
function returnJSON (string $string, bool $success) {
exit(json_encode(['success' => $success, 'message' => $string])); //doesnt print anything
}
if ($someCondition)
returnJSON("This message is not printed...", false);
/*some code...*/
Сценарий завершается правильно, но он не будет печатать вывод JSON.Но если я удаляю функцию и помещаю exit
в if statement
, все прекрасно работает:
header('Content-Type: application/json');
if ($someCondition)
exit(json_encode(['success' => false, 'message' => "now everything works... but why?"]));
/*some code...*/
Может кто-нибудь объяснить мне это?Как я могу завершить сценарий и напечатать JSON внутри функции?
РЕДАКТИРОВАТЬ:
Полный код:
<?php
require("../tridy/SimpleMailer.php");
header('Content-Type: application/json');
function returnJSON (string $string, bool $success) {
exit(json_encode(['success' => $success, 'message' => $string]));
}
if (isset($_SERVER['HTTP_ORIGIN']))
if (strpos('http://' . $_SERVER['SERVER_NAME'], $_SERVER['HTTP_ORIGIN']) !== 0)
returnJSON("Neplatný HTTP ORIGIN.", false);
else
returnJSON("Chybí hlavička HTTP ORIGIN.", false);
if (empty($_POST["name"]) || empty($_POST["email"]) || empty($_POST["subject"]) || empty($_POST["message"]) ||
empty($_POST["g-recaptcha-response"])) //this condition is true
returnJSON("Nebyly vyplněny všechny pole.", false);
if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))
returnJSON("Email není ve správném formátu.", false);
if (strlen($_POST["name"]) > 20 || strlen($_POST["name"]) < 3 || strlen($_POST["subject"]) > 50 || strlen($_POST["subject"]) < 5)
returnJSON("Pole nesplňují požadavky. Pravděpodobně přesahují maximálaní nebo nesplňují minimální délku.", false);
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=6LcCRVsUAAAAAFMGhWg0Yv9-SMG9OMtFMzKU-ys5&response=".$_POST["g-recaptcha-response"]."&remoteip=".$_SERVER['REMOTE_ADDR']);
if (!json_decode($response)->success)
returnJSON("Google Recaptcha nebyla ověřena", false);
$mailer = new SimpleMailer();
$body = "Zpráva z kolemzeme.tode.cz!<br><b>Od:</b> ".$_POST["name"];
$body .= "<br><b>Zpráva:</b> ";
$mail->from_name = $_POST["name"]." - Kolem Země cestovat denně";
$mail->to = "email@email.cz";
$mail->subject = $_POST["subject"]." - Zpráva z kolemzeme.tode.cz";
$mail->content_type = "text/html";
$mail->body = $body.htmlspecialchars($_POST["message"]);
if ($mail->send() != 1)
returnJSON("Je mi líto, ale vznikla nějaká neznámá chyba při odesílání emailu. Prosím zkuste to znovu později.", false);
else
returnJSON("Email byl úspěšně odeslán. Děkuji za kontaktování, pokusím se ti odpovědět co nejdříve.", true);
РЕДАКТИРОВАТЬ 2:
Я пытался вызвать exit
в операторе if и вызвать returnJSON
для вывода JSON, но он все еще не работает:
function returnJSON (string $string, bool $success) {
return(json_encode(['success' => $success, 'message' => $string]));
}
if ($someCondition)
exit(returnJSON("Still doesn't print anything", false));
Теперь похоже, что json_encode
ничего не возвращает, но когдая проверяю это.