$.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.

Другие вопросы по тегам