$.post возвращает правильные данные с дополнительным символом новой строки в начале
У меня есть простой вызов ajax на login.php, который выполняет базовую проверку.
Если пользователь вводит правильное имя пользователя, то checkuser.php возвращает "Действительное имя пользователя" через оператор echo.
Теперь, когда я предупреждаю элемент данных из запроса на публикацию, он показывает "Действительное имя пользователя". Но когда проверяется равенство с "Действительным именем пользователя", оно переходит к ложной части оператора if, предупреждая "сбой".
checkuser.php
include_once 'functions.php';
echo "Valid username";
login.php (минимальный)
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function() {
$.post('checkuser.php', {user: 'validUser'},function(data) {
$.trim(data);
alert(data);
if (data=='Valid username')
alert('success');
else
alert('fail');
});
});
</script>
</head>
</html>
Я использовал функцию обрезки JQuery безрезультатно. Есть идеи, почему это может происходить?
Таким образом, получается, что оператор include предварительно присоединяет \ n к вызову $.post, потому что в конце файла были пустые строки. Проблема была решена путем удаления этих пустых строк после закрывающего тега?> В файле functions.php.
3 ответа
У вас, вероятно, есть пустые строки в конце вашего скрипта PHP.
Что касается того, почему ваш код PHP возвращается \n
с данными нам нужно увидеть код.
Однако, почему $.trim() не работает - в частности, jQuery $.trim() не удаляет переводы строки. Вместо этого вы можете использовать Regex. Это удалит все новые строки:
textvar = textvar.replace(/(\r\n|\n|\r)/gm,"");
Хотя приведенная выше реализация Криса кажется лучшим выбором для того, что вы ищете.
Если вы используете Google Chrome, вы можете проверить ответ на вкладке сети при использовании инструментов разработчика.
Однако я бы предложил вам использовать параметр результата, чтобы проверить, был ли вызов успешным.
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$(document).ready(function() {
$.post('checkuser.php', {user: 'validUser'},function(data, result) {
alert(data);
if(result=='success')
alert('success');
else
alert('fail');
});
});
</script>
</head>
</html>
PS. Ваш оригинальный код работает на моей стороне. Единственное, что я добавил, это php-теги в вашем файле checkuser.php.