AJAX 响应文本不匹配


AJAX responseText missmatch

>我有一个AJAX调用:

var ajax = new XMLHttpRequest();
ajax.open("POST", "testing.php", true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function(){
    if(ajax.readyState == 4 && ajax.status == 200){
        var returnVal = ajax.responseText;
        if(returnVal == "success"){
            // Redirect
        }else{
            // Inform of failure
        }
    }
}
ajax.send("testing=1");

与以下 PHP 配对:

if(isset($_POST["testing"])){
    $formScore = checkForm($db_conx);
    if($formScore == 10){
        echo "success";
        exit();
    }else{
        echo "fail";
        exit();
    }
}

这工作得很好。表单分数应该是"10",而发送回 AJAX 调用的值实际上是"成功"。至少,如果我打印出响应文本:

$('.output').html(ajax.responseText);

output中的值是"成功" - 单词前面有空格。我无法使用光标选择空间,但是当我查看页面的 HTML 时,它就在那里。

但是,无论如何,if(returnVal == "success")线总是等同于。我什至尝试过if(returnVal == " success"),但仍然是错误的。

这是所有代码。我什至尝试了硬编码$formScore = 10;以查看这是否是问题所在。无论如何,出于某种原因,平等总是错误的。

我缺少什么明显的东西吗?我已经测试了 100 种不同的方法,结果仍然相同。

PHP 文件中的某个位置有一个空格导致了此问题。可能在文件开头的<?php之前。

要解决此问题,您可以在以下情况下使用它之前修剪响应:

if (returnVal.trim() == "success") {

或者更改您的 PHP 以返回带有标志作为属性的 JSON,这样空格就不会成为问题。

最好的解决方案显然是摆脱服务器端代码中的空间,但是如果不看到您的 PHP,我们就无法诊断该问题。

您可以使用 jQuery trim函数来删除装订空格和尾随空格。

if($.trim(returnVal) == "success")