Ответ с обработчика обратно в ajax приходит с пробелом
Проблема в том, что при отправке ajax запроса на обработчик (отдельный php файл), приходит нужный ответ только с пробелом. Раньше такого не было, может это небольшая ошибка в самом коде или что-то не так, но раньше ответы приходили без отступа. То есть я отправляю запрос на получение допустим новой картинки капчи на сайт. В обработчике создаётся картинка и отправляется в определённую папку в проекте, а в это время после успешной операции в функции php должно быть написано: 'successfuly', по итогу приходит ' successfuly'. В коде ничего не менял, но стал приходить ответ с этим пробелом. Возвращаю ответ на ajax через функцию success: в аргументе function(data), в обработчике в конце кода пишу die('successfuly');.
Отрывок из кода:
JS
$.ajax({
url: "db/requestAccepts.php",
type: "POST",
cashe: false,
data:{
request_captcha: 1,
answer: answer
},
success: function(data) {
// data = data.trim(); для получения нормального ответа теперь приходится использовать эту функцию, чтобы убрать пробел впереди. Раньше приходило без пробела
if (data == 'successfuly') { // Если не использовать функцию .trim(), конструкция if вернёт false так как ответ содержит другие символы, в данном случае это какой-то пробел впереди
console.log(data); // Всё правильно
}else{
console.log(data); // неправильно
}
}
}
PHP (обработчик)
if ($_POST) {
/* ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ САЙТА */
require_once 'dbConnect.php';
/* Проверка ответа на капчу сайта */
if (isset($_POST['request_captcha'])) {
if($_POST['answer'] == $_SESSION['answerCaptcha']) {
$_SESSION['captcha'] += 1; // Прибавляем в сессию единицу запроса капчи для подсчёта количества запросов
if ($_SESSION['captcha'] > 3) {
if (isset($_SESSION['user'])) {
/* Пользователь авторизован */
$editUser = R::findOne('users', 'id = ?', [$_SESSION['user']['id']]);
$editUser->blocked_captcha = 1;
R::store($editUser);
die('toManyRequests'); // Слишком много запросов капчи
}else{
/* Пользователь не авторизован */
$_SESSION['blocked_user_spam'] = 1;
die('toManyRequests'); // Слишком много запросов капчи
}
}else{
die('successfully');
}
}else{die('notSuccessfully');}
}
}
Ответы (2 шт):
Копай файл require_once 'dbConnect.php'; и всё что заинклюдил.
И ещё... <?php должен быть в самом начале файла и ?> не надо делать в конце - это дозволительно.
И ещё... Поверь кодировку файла, если у тебя UTF-8 то проверь все файлы на наличие UTF8-BOM!
Редакторы не показывают этих 2 невидимых символа... А Они есть!
Попробуйте использовать echo вместо die(); Или еще лучше и удобнее если нужно передать несколько значений, вывод в JSON формате
echo json_encode(
array(
"result" => "successfully"
//Тут можно дописать доп. параметры через запятую которые вернет data
//"test" => "hello", "a" => 1
)
);
А для результата на стороне JS
success: function(data) {
if (data.result == 'successfuly') {
log(data.result);
}
}
Этот вариант с большой вероятностью решит вашу проблему.