Хотите напечатать результат и выйти из кода? - PullRequest
0 голосов
/ 25 октября 2018

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

1 Ответ

0 голосов
/ 25 октября 2018

Через час я наконец нашел проблему.Это было: ENCODING

Когда я не вызывал функцию, кодирование было в порядке, но когда я обращался к тексту из параметра функции, кодирование было плохим, и json_encode возвращала пустую строку.Вот почему я ничего не видел, но сценарий был прекращен.

Мой окончательный код:

header('Content-Type: application/json');

function returnJSON (string $string, bool $success) {
    exit(json_encode(['success' => $success, 'message' => utf8_encode($string)])); //Fixing encoding
}

if ($someCondition)
    returnJSON("Working well with diacritics (ěščřžýáíé)", false);

/*some code...*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...