【问题标题】:jQuery.ajax() v1.5 returns "parsererror" for json datajQuery.ajax() v1.5 为 json 数据返回“parsererror”
【发布时间】:2011-06-25 13:04:12
【问题描述】:

我有这个从列表中获取服务器 ID 的功能。该函数始终返回“parsererror”。我查看了返回的 JSON 数据,但似乎无法正常工作,因为 jQuery 在 v1.5 中重写了 ajax。

function server_id()
{
    $.ajax({
        type: "GET",
        url: "http://localhost/server_list.php",
        dataType: "json", 
        success: function(data, status) {
             alert(status + "\n\n" + data.server_id);
        },
        complete: function(data, status){
                  alert(status);
        }
    });

}

server_list.php

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

    $output['server_id'] = '123';
    print json_encode($output);

在 firebug Net >> XHR 中,它在打开选项卡时将其读取为 JSON,并且响应选项卡显示下面的内容。

{"server_id":"123"}

我也尝试过如下设置内容类型标题,但没有成功。

Content-type: application/json

更新

如果验证插件是从 http://bassistance.de/jquery-plugins/jquery-plugin-validation docs.jquery.com/Plugins/Validation v1.7 加载的,我只会收到“parsererror”。

如果您添加插件 jquery 会自动将 jsonp 回调添加到查询字符串,即使您设置为 false 或不包含 jsonp 的参数。很奇怪

关于如何解决的任何想法?

谢谢

【问题讨论】:

  • 请发布生成此输出的代码 sn-p
  • @pinusnegra 编辑了上面的帖子以显示输出。看不到差异,因为您可以看到显示其 JSON 的萤火虫输出
  • 为什么会有jsonpCallback?这应该是 AJAX 请求还是 JSONP?
  • @Dan Grossman 从 jQuery 1.5 开始,将 jsonp 选项设置为 false 会阻止 jQuery 将“?callback”字符串添加到 URL 或尝试使用“=?”为转型。在这种情况下,您还应该明确设置 jsonpCallback 设置。例如 { jsonp: false, jsonpCallback: "callbackName" }
  • 尝试在 jquery-1.5.js 文件中的parseJSON()/ajaxConvert() 中设置一个断点,看看那里发生了什么。

标签: php ajax json jquery


【解决方案1】:

这里的简单解决方法似乎是jQuery 1.5 与1.7 的验证插件不兼容。降级到 jQuery 1.4.x(或者按照 philhag 的建议修补或删除验证插件代码)解决了这个问题。

非常感谢此线程中发现冲突的人。它为我省去了调试 jQuery 代码的麻烦。

【讨论】:

    【解决方案2】:

    您似乎想要常规的 json 通信(dataType 是“json”而不是“jsonp”,server_list.php 发送 json),但您正在设置 jsonp 选项。删除 jsonpjsonpcallback 行。将jsonp 设置为false 并不意味着您禁用它!

    当这两行被注释掉时,everything seems to work fine

    【讨论】:

    【解决方案3】:

    感谢那些指出 jQuery.validate 是罪魁祸首的人,在找到这个帖子之前我已经苦恼了好几天。

    在我的测试中,它实际上似乎是导致问题的 jquery.validate-vsdoc.js,而不是插件本身,以防它对其他人有任何用处。

    【讨论】:

    • -vsdoc 文件的存在只是为了让 Visual Studios 完成代码 - "This file has been commented to support Visual Studio Intellisense."。无需将它们实际包含在您的生产站点中的任何位置。
    • 这似乎是对问题的评论,而不是答案,应该这样发布。要对问题发表评论,您需要参与社区并获得一些声誉,然后才能获得特权。欢迎来到 SO!
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2011-06-30
    • 2011-11-19
    • 2012-06-25
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多