jQuery,Ajax,JSON,PHP和parsererror

时间:2009-08-09 21:43:37

标签: php jquery ajax json

我正在尝试使用jQuery中的$.ajax将表单发送到PHP。我将整个事件作为JSON发送,但是,当我尝试获得响应时,我得到'parsererror'。我做错了什么?

jQuery片段:

$("form").submit(function(){
    $.ajax({type: "POST",
        url: "inscrever_curso.php",
        data: {cpf : $("input#cpf").val(),nome : $("input#nome").val()},
        dataType: "json",
        success: function(data){
            alert("sucesso: "+data.msg);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert ("erro: "+textStatus);
        }
    });
    return false;
});

PHP:

<?php
    $return[msg]="Testing, testing.";
    echo json_encode($return);
?>

4 个答案:

答案 0 :(得分:6)

我不知道这是否是您的问题的原因,但这是关于您的PHP代码的一件事:

$return[msg]="Testing, testing.";
echo json_encode($return);

执行此操作,使用E_NOTICE error_reporting级别,您将获得:

Notice: Use of undefined constant msg - assumed 'msg'

如果在服务器上启用并显示通知,则会导致输出无效JSON(输出包含JSON字符串之前的错误消息)。


要避免该通知,您必须使用以下语法:

$return['msg']="Testing, testing.";
echo json_encode($return);

请注意msg周围的引号:您创建的数组元素的键是一个字符串常量,因此,它用引号括起来。

如果您没有输入这些引号,PHP会搜索名为“msg”的defined常量,该常量可能不存在。

有关此问题的详情,您可以查看本手册的这一部分: Why is $foo[bar] wrong?

(我不确定它会解决你的问题,但无论如何都要知道。)

答案 1 :(得分:3)

您的PHP代码应该是:

<?php
    $return = array();
    $return['msg']="Testing, testing.";
    echo json_encode($return);
?>

答案 2 :(得分:1)

我刚刚发现了正在发生的事情:我有一个友好URL的.htaccess脚本,它正在搜索正确的PHP文件,但是在错误的目录中。我只是在URL中的文件名之前添加了一个'/',然后就可以了。

答案 3 :(得分:0)

不确定这是否对任何人有帮助,但我只进行了 json_decode() 调用,但之前没有 echo。完全有效的 PHP,但会弄乱您的 AJAX 响应并导致解析器错误。