我有一个调用php文件的ajax脚本。
php文件回显“是”或“否”,我想用字符串进行逻辑比较。
在javascript中,我想比较responseText中的字符串,看它是否==“是”(或“否”)。但比较失败了。
所以我做了警告responseText,它确实显示“是”(或“否”)作为字符串。但我在这里读到,responseText可能包含隐藏的空白字符,所以我做了responseText的字符串长度,它表明字符串长度比应该的长4个字符。所以我转发了responseText警报(escape(responseText)),它显示我在responseText字符串的末尾隐藏了%0A和%0D(换行符和换行符)。
我读到这些字符是由php添加的,但我也读到不同的php版本/服务器之间的额外字符是不同的。
如何在不使用正则表达式的情况下防止这些额外的空格,因为正则表达式可能会删除有意的空格?
请不要建议使用jquery或mootools作为答案。
TIA
答案 0 :(得分:7)
我读到这些字符是由php添加的,但我也读到不同的php版本/服务器中额外的字符是不同的。
那是错的。这很容易验证:创建一个test.php文件,只写这个:<?php echo "test";
(没有?>
)并执行它。没有空格。
这些空格很可能来自你的脚本。一个常见错误是在关闭php标记(?>
)之后留下一些尾随换行符,这会导致打印一个新行。
确认echo "yes";
之前或之后包含的所有文件都不回显任何内容,并且在?>
之后没有尾随换行符。
避免此问题的最简单方法是不要在文件末尾使用php close标记(它们不是必需的)。
答案 1 :(得分:1)
我知道你问过没有正则表达式进行比较,但鉴于你上面提到的条件,这将是一种非常快速有效的方式来得到你的答案,并不一定会扰乱任何其他处理。
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组合),并转换为小写仅供比较。
答案 2 :(得分:1)
我认为你可能会采取错误的方式。而不是手动尝试创建响应为什么不使用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;
答案 3 :(得分:0)
在发送数据之前,您是否尝试过使用PHP的trim()函数?
答案 4 :(得分:0)
即使可以在php标签之前或之后照看所有PHP脚本以避免CRLF,这也不是一个好的选择,因为你可以想象在几天,一个月或几年内添加(不想要!)一个CRLF一个文件,这将影响您网站的另一部分。
事实上,为避免此问题,您有两种选择:
选项1 :让php在开始时使用垃圾发送数据,并使用以下内容清理Javascrpt中的数据:
response = http.responseText;
response = response.replace(/[\n\r]+/g, '');
在这种情况下,这意味着您清理所有CRLF(如果需要,只在开始时将正则表达式更改为清理或清除空格)
选项2 (我认为更好)是在将数据发送到浏览器之前立即清理PHP的输出缓冲区。所以:
... many code here
ob_end_clean();
echo $data_for_the_browser;
答案 5 :(得分:0)
就我而言,我通过删除同一php文件中的两个php块之间的空格(“ ... {? > < ?php
... ”)解决了此问题它需要通过 require_once()方法来实现。
<?php
//your code
?>
*this space might appear in the XHTTP responce*
<?php
//your code
?>
-或-
您可以从服务器脚本(php)将数据作为JSON对象发送,为此您可以使用json_encode()
。对于客户端(javascript),您可以使用eval(this.responce)
。