jQuery Ajax - 不能解析json?

时间:2013-05-26 10:46:34

标签: ajax jquery

我遇到了一个非常奇怪的问题,我认为这之前有用,但现在已经没有了。我甚至不记得改变什么。我尝试使用较旧的jQuery库。

我在第68行遇到错误:http://i.imgur.com/H51wG4G.png :(匿名函数)。这是指第68行: var jsondata = $ .parseJSON(data);

这是我的ajax功能 由于这个错误,我无法让我的警报工作。顺便说一句,这个脚本用于登录,所以如果我刷新我的网站,我将登录,以便工作。我还可以返回我的json对象,如图所示。 {“success”:false,“msg”:“Fel anv \ u00e4ndarnamn eller l \ u00f6senord。”,“redirect”:“”}

当我得到这个时,如果我成功了,我将检查login.success == true并从logged-in.php获取登录面板。

$('#login_form').submit(function()
{
    var login = $.ajax(
    {
        url: '/dev/ajax/trylogin.php',
        data: $(this).serialize(),
        type: 'POST',
    }, 'json');
    login.success(function(data)
    {
        var jsondata = $.parseJSON(data);
        console.log(jsondata);
        if(jsondata.success == true)
        {
            $.get("/dev/class/UI/logged-in.php", function(data) {
                $(".login-form").replaceWith(data);
            });
        }
        else
        {
            alert(jsondata.msg);
            $('#pwd').val('');
        }
    });
    return false;
});

谢谢。

3 个答案:

答案 0 :(得分:1)

您的回复不是有效的JSON。你看:“意外的令牌<”。

这意味着您的回复包含意外的“<”并且它无法转换为JSON格式。

console.log(data) 放在之前将其转换为JSON。

答案 1 :(得分:1)

如果您在附加的屏幕截图中显示的response是可以接受的,那么您的PHP脚本中就会出现生成JSON响应的问题。确保生成此响应的PHP脚本(或该文件中包含的任何其他脚本)未使用名为SITE_TITLE的常量。如果这些PHP文件中的任何一个需要使用该常量,请确保在某处定义SITE_TILE并将其包含在这些文件中。

可能发生的情况是,PHP响应生成中涉及的JSON个文件之一可能已经以某种方式发生了变化并开始使用SITE_TITLE costant,而没有先定义它,或者不包括包含该常量的文件。

或者,JSON代中涉及的所有文件都没有更改,而是error_reporting设置可能已更改,现在PHP解释器正在输出{{1}当它看到一些未定义的常量时,它会调整文本。

解决问题

如果notice常量未定义,请定义它。 如果在某个其他文件中定义了SITE_TITLE常量,请在生成响应的SITE_TITLE脚本中包含该文件。

否则,我不建议这样做,请设置PHP设置以忽略error_reporting

答案 2 :(得分:0)

你应该使用login.done(),而不是login.success():) 成功仅在ajax()函数内使用!不推荐使用成功对象函数,只能将成功设置为Ajax()param!

并且不需要解析数据,因为它已经是Json格式了!

jQuery Ajax

$('#login_form').submit(function()
{
    var login = $.ajax(
    {
        url: '/dev/ajax/trylogin.php',
        data: $(this).serialize(),
        type: 'POST',
    }, 'json');
    login.done(function(data)
    {
        var jsondata = data;
        console.log(jsondata);
        if(jsondata.success == true)
        {
            $.get("/dev/class/UI/logged-in.php", function(data) {
                $(".login-form").replaceWith(data);
            });
        }
        else
        {
            alert(jsondata.msg);
            $('#pwd').val('');
        }
    });
    return false;
});