jQuery AJAX 响应处理

3

可能是一些简单的错误,但我就是想不出来,我在另一个解决方案中使用几乎相同的代码,那里却可以正常工作。

Javascript:

$('#drop').click(function(e) {
    e.preventDefault();
    $('#login').slideToggle(1000);
});

$('#sub').click(function(e) {
    e.preventDefault();
    $('#info').html('<img src="img/load.gif" />')
    $.post('login.php', {user: document.getElementById('user').value, pass: document.getElementById('pass').value}, function(response) {
        if (response == 'ok')
        {
            $('#login').slideUp(500);
            $('#info').html('');
            $('#joocy').html('<img src="img/load.gif" />').load('manage.php');
        }
        else if (response == 'error')
        {
            $('#info').html('Invalid user/pass');
        }
    });
});

PHP:

if ($row = mysql_fetch_array($result))
{
    echo 'ok';
}
else
{
    echo 'error';
}

响应已发送,但if语句没有捕获它。 typeof()返回字符串。

编辑: else if (response === 'error ') // 注意字符串中的空格

这个可以工作,有人能解释为什么在返回字符串后会添加空格吗?

解决:PHP结束标记后有一个空格。谢谢大家的时间! :)


响应变量返回什么?if子句没有做什么?总是返回false吗? - Rene Pot
返回预期的“ok”或“error”,如果条件语句返回false。 - chronixlol
你每次都收到“错误”响应吗? 如果是这种情况,那么数据库操作肯定有问题。 - Rukmi Patel
1
你应该提供PHP文件的其余部分(特别是在else { echo 'error'; }之后),因为PHP关闭标记(?>)后面可能会发送空格字符与文本一起。 - Nicolae Albu
1
我知道这不是你想要的,但如果你让服务器响应一个正确的响应代码并使用jQuery的响应处理程序errorsuccess,你的生活会变得更加轻松。 - polarblau
显示剩余3条评论
3个回答

2
你的php脚本中可能在闭合的“?>”标签后有空格。尝试删除所有空格或完全删除闭合标签。

1

可能输出包含其他字符,例如 BOM
这是什么意思?

$.post('login.php', {user: document.getElementById('user').value, pass: document.getElementById('pass').value}, function(response) {
    if (response == 'ok')
    {
        $('#login').slideUp(500);
        $('#info').html('');
        $('#joocy').html('<img src="img/load.gif" />').load('manage.php');
    }
    else if (response == 'error')
    {
        $('#info').html('Invalid user/pass');
    }
    var tmpText = "" + response.length + ": ";
    for(var tmpI=0; tmpI<response.length; tmpI++) {
        tmpText += response.charCodeAt(tmpI) + " ";
    }
    $("<fieldset></fieldset>").text(tmpText).appendTo("#info");
});

打印?


0

如果代码中有额外的空格是由 php 一侧添加的,您可以使用 trim 函数。

if($.trim(response)==='error')
{
 //
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接