responseText содержит дополнительные символы пробела (новые строки, строки), как их предотвращать и удалять?

У меня есть сценарий ajax, который вызывает php-файл.

Эхо-файл php-файла «да» или «нет», я хочу использовать строки для выполнения логических сравнений.

В javascript я хочу сравнить строку в responseText, чтобы увидеть, является ли она == «да» (или «нет»). Но сравнение терпит неудачу.

Таким образом, я делаю alertText ответа, и он показывает «да» (или «нет») в качестве строки. Но я читаю здесь, что responseText может содержать скрытые символы пробела, поэтому я сделал длину строки responseText и показывает, что длина строки составляет 4 символа дольше, чем она должна быть. Поэтому я избежал ответа responseText (escape (responseText)), и он показывает, что у меня есть% 0A и% 0D (новые строки и строки), скрытые в конце строки responseText.

Я читал, что эти символы добавляются php, но я также читал, что дополнительные символы различаются между разными версиями / серверами php.

Как предотвратить эти лишние пробелы без использования регулярных выражений, поскольку регулярное выражение может удалить преднамеренные пробелы?

Пожалуйста, не предлагайте использовать jquery или mootools в качестве ответов.

ТИА

    Я читал, что эти символы добавляются php, но я также читал, что дополнительные символы различаются между разными версиями / серверами php.

    Это неверно. Это легко проверить: создайте файл test.php, напишите это и только это: <?php echo "test"; (без ?> ) в него и выполнить его. Не будет пробелов.

    Эти пробелы, скорее всего, происходят из ваших сценариев. Общей ошибкой является оставить некоторые завершающие символы новой строки после закрытия php-тегов ( ?> ), Что приведет к печати новой строки.

    Убедитесь, что все файлы включены до или после echo "yes"; не откликайтесь на что-либо и не имеете завершающую новую строку после ?> .

    Самый простой способ избежать этой проблемы – не использовать теги php close в конце файлов (они не являются обязательными).

    Я знаю, что вы спросили о сравнении без регулярных выражений, но, учитывая условия, о которых вы говорили выше, это будет очень быстрый и эффективный способ получить ваш ответ и не обязательно будет нарушать любую другую обработку.

     var trimmedResponse = responseText.replace(/^\s*/,'').replace(/\s*$/,'').toLowerCase(); if (trimmedResponse == 'yes') { // do your 'yes' case } else if (trimmedResponse == 'no') { // do your 'no' case } else { // do your 'none of the above' case } 

    Это позволит обрезать ведущее белое пространство, заходящее белое пространство (включая комбо CR / LF) и преобразовать в нижний регистр только для сравнения.

    Я думаю, вы можете пойти не так. Вместо того, чтобы вручную пытаться создать ответ, почему вы не используете PHP-массивы в качестве структуры данных и JSON для доставки?

     <?php $flag = false if (condition){ $flag = true; } $arr = array("is_true" => $flag) $json = json_encode($arr); // See http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/ // Set JSONP header header('content-type: application/json; charset=utf-8'); // Get callback from $_GET and prepend the JSON data echo isset($_GET['callback']) ? "{$_GET['callback']}($json)" : $json; 

    Вы пытались использовать функцию trim () PHP перед отправкой данных?