AJAX responseText不匹配

时间:2015-01-12 08:26:42

标签: javascript php jquery ajax

我有一个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")始终等同于 false 。我甚至试过if(returnVal == " success"),但仍然是假的。

这是所有代码。我甚至尝试过硬编码$formScore = 10;,看看是不是问题。无论如何,由于某种原因,平等总是错误的。

有什么明显的东西我不见了吗?我已经测试了这100种不同的方式,结果仍然相同。

2 个答案:

答案 0 :(得分:2)

PHP文件中有一个空间导致了这个问题。可能在<?php之前的文件开头。

要解决此问题,您可以在条件中使用它之前修剪响应:

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

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

最好的解决方案显然是摆脱服务器端代码中的空间,但是我们无法在不看PHP的情况下诊断出这个问题。

答案 1 :(得分:1)

您可以使用jQuery trim函数删除前导和尾随空格。

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