【问题标题】:AJAX JSON + PHP JSON errorAJAX JSON + PHP JSON 错误
【发布时间】:2011-08-25 05:47:49
【问题描述】:

我有一个 jQuery AJAX 代码,它从 php 文件中接收 JSON 类型的数据。没有 dataType: "json" 一切正常。但我需要 JSON 类型的数据。收到的文本是有效的 JSON 代码

{"ok":"false","answer":"所有字段都必须填写"}

但是当我使用 dataType 时,我得到了一个错误

对象 "parsererror" SyntaxError

这是 JS 代码:

    $.ajax({
        url : "testing/regtest.php",
        type : "POST",
        dataType: "json",
        data : {
            mail : $('#mail_field').val(),
            username : $('#username_field').val(),
            password : $('#password_field').val(),
            password_2 : $('#rep_password_field').val()
        },
        success : function(data) {
            console.log(data.ok);
        },
        error: function(a,b,c) { console.log(a,b,c); }
    });

感谢您的帮助!
更新: 这是php服务器端代码: http://jsfiddle.net/VfQbz/1/
更新 2:它适用于 IE9,但不适用于 chrome

【问题讨论】:

  • 服务器端脚本工作正常吗? JS 本身看起来不错。
  • 是的。服务器端一切正常
  • 这个错误到底发生在哪里?服务器端还是客户端?
  • 检索到的 JSON 是否有效?已经尝试过jsonlint.com?对我来说似乎是一个解析问题
  • 客户端。它只发生在 dataType 设置为 jQuery 的情况下。检索到的 JSON 有效。

标签: php javascript jquery ajax json


【解决方案1】:

我不太确定这是否可行,但恕我直言,问题在于 PHP 糟糕的 JSON 编码函数。试试:

if (check_post() === true) {
    $password = $_POST['password'];
    $password2 = $_POST['password_2'];
    $username = $_POST['username'];
    $mail = $_POST['mail'];
    if (valid_data($password, $password2, $username, $mail) === true){
        $answer = json_encode(array("ok" => "true", "answer" =>     $service_messages["account_registered"]));
        echo "'".$answer."'"; // Note the additional single quotes
    }
}

通过深入研究 jQuery 源代码,我发现响应解析中出现错误。希望它有效。

【讨论】:

    【解决方案2】:

    您的 PHP 代码是否设置了正确的标头?

    header('Content-type: application/json');

    【讨论】:

    • dataType: 'json' 告诉 jquery 将返回的字符串视为 json 数据,而不管 http 标头说什么。
    • 好吧,我有这个代码$.getJSON(url, core.ProcessJsonResponse).error(core.ShowError);,如果没有Kohana::$content_type = 'application/json'; 语法,这将不起作用。只有设置了内容类型,我才在 firebug HTTP 请求结果中看不到 HTML 选项卡。
    • 你的 PHP 语法是什么样的?
    • 它在我的系统上的 IE 和 firefox 中工作:img827.imageshack.us/img827/8241/stackoverflow.png
    • 您在succes 中尝试过这个吗? alert(data.ok + ":" + data.answer); Chrome 14.0.835.109 有效!
    【解决方案3】:

    只是为了涵盖所有基础:您确定您的 jQuery 是最新的并且没有以任何方式更改吗?

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多