【问题标题】:JQuery getJSON - ajax parseerrorJQuery getJSON - ajax 解析错误
【发布时间】:2009-03-10 17:25:09
【问题描述】:

我尝试使用 JQuery getJSON 和 ajax 解析以下 json 响应:

[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}]

我也尝试过像这样转义“/”字符:

[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview <\/h1><h1>January 29, 2009<\/h1>"}]

当我使用 getJSON 时,它不会执行回调。所以,我用 JQuery ajax 试了一下:

$.ajax({
    url: jURL,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function(x) {
        if(x && x.overrideMimeType) {
            x.overrideMimeType("application/j-son;charset=UTF-8");
        }
    },
    success: function(data){
        wId = data.iId;
        $("#txtHeading").val(data.heading);
        $("#txtBody").val(data.body);
        $("#add").slideUp("slow");
        $("#edit").slideDown("slow");
    },//success
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    }
});

ajax 遇到错误并发出以下警告:

XMLHttpRequest=[{"iId":"1","heading":"Management Services","body":"<h1>Program Overview </h1><h1>January 29, 2009</h1>"}]

textStatus=parseerror

errorThrown=undefined

然后我尝试了一个简单的 JQuery get 调用以使用以下代码返回 JSON:

$.get(jURL,function(data){
    var json = eval("("+data+");");
    wId = json.iId;
    $("#txtHeading").val(json.heading);
    $("#txtBody").val(json.body);
    $("#add").slideUp("slow");
    $("#edit").slideDown("slow");
})

.get 返回 JSON,但无论我如何修改 JSON(内容类型标头、格式的其他变体等),评估都会出错

我想出的是,在 JSON 中返回 HTML 并对其进行解析似乎存在问题。但是,我希望我可能错过了一些可以让我通过 JSON 获取这些数据的东西。有人有什么想法吗?

【问题讨论】:

  • 这就是所有返回的 JSON 吗?
  • 修正了您的格式。以后只需缩进 4 个空格就可以了。
  • 是的,这就是所有返回的 JSON。只是试图从数据库中返回一个具有 3 个值(id、heading、body)的项目(以便用户可以更新它)。返回的不是完整的 HTML 文档。正是我需要在 div 中显示的内容。感谢格式化!!!

标签: javascript jquery ajax json eval


【解决方案1】:

您拥有的 JSON 字符串是一个包含 1 个对象的数组,因此要访问该对象,您必须先访问该数组。使用如下所示的 json.php:

[
    {
        "iId": "1",
        "heading": "Management Services",
        "body": "<h1>Program Overview</h1><h1>January 29, 2009</h1>"
    }
]

我刚试过这个

$.getJSON("json.php", function(json) {
    alert(json[0].body); // <h1>Program Overview</h1><h1>January 29, 2009</h1>
    alert(json[0].heading); // "Management Services"
    alert(json[0].iId); // "1"
});

我也试过这个:

$.get("json.php", function(data){
    json = eval(data);
    alert(json[0].body); // <h1>Program Overview</h1><h1>January 29, 2009</h1>
    alert(json[0].heading); // "Management Services"
    alert(json[0].iId); // "1" 
});

他们都对我很好。

【讨论】:

  • 我的似乎永远不会成功。所以,我无法让它执行该功能。但是,这是为 IE 用户开发的。所以,我一直在IE中进行测试。我会尽快在 Firefox 中尝试,但(遗憾的是)它必须在 IE 中工作。
  • 我在 IE 和 Firefox 中运行了上面的代码,它返回正常。尝试运行我上面的内容并从那里开始添加元素。
  • 现在就去试试。我开始放弃 JSON。
  • 你使用的是什么版本的 JQuery?
  • JQuery 1.3 中的响应 = [{\"iId\":\"1\",\"heading\":\"Management Services\",\"body\":\"计划概述

    2009年1月29日

    \"}]
【解决方案2】:

如果有人对此仍有疑问,那是因为您的响应需要是 JSON 字符串和内容类型“application/json”。

asp.net (c#) 中的 HTTP 示例:

public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        context.Response.Write("{ status: 'success' }");
    }

第,

马蒂

【讨论】:

    【解决方案3】:

    您是否尝试过对 HTML 进行 XML 编码(即 <H1>)?

    【讨论】:

      【解决方案4】:

      你可以让它作为文本返回,然后用json.org parser解析它
      看看它是否有不同的工作方式

      【讨论】:

        【解决方案5】:

        请注意,问题中存在语法错误。与

        的行
        x.overrideMimeType("application/j-son;charset=UTF-8");
        

        应该阅读

        x.overrideMimeType("application/json; charset=UTF-8");
        

        这也有很大的不同。

        【讨论】:

          【解决方案6】:

          去掉JsonData前面和最后的[],就可以了。

          【讨论】:

          • JSLint 会告诉 JSON 以 Array [] 开头是有效的,我错了吗?
          【解决方案7】:

          禁用 Firebug Lite 为我解决了这个问题。

          Bug with combination of: jQuery 1.4, ajax/json, Firebug Lite and IE 8

          【讨论】:

            【解决方案8】:

            这是一个工作示例并经过测试!

            <script type="text/javascript">
            
            function fetchData() {
            var dataurl = "pie.json";
            $.ajax({
                url: dataurl,
                cache: false,
                method: 'GET',
                dataType: 'json',
                success:  function(series) {
                    var data = [];
                    //alert(series.length);
                    for (var i=0; i<series.length;i++){
                        data[i]=series[i];
                    }
            
                    $.plot(
                            $("#placeholder"), 
                            data, 
                            {
                                 series: {
                                   pie: {
                                     show: true,
                                     label: {
                                       show: true
                                     }
                                 }
                                },
                                legend: {
                                  show: true
                                }
                              }
                   );
                 }
            });
            
               //setTimeout(fetchData, 1000);
            }
            </script>
            

            而json源如下(pie.json):

            [{ "label": "Series1",  "data": 10},
            { "label": "Series2",  "data": 30},
            { "label": "Series3",  "data": 90},
            { "label": "Series4",  "data": 70},
            { "label": "Series5",  "data": 80},
            { "label": "Series6",  "data": 110}]
            

            【讨论】:

              【解决方案9】:

              首先,尝试确定问题是否与一般 JSON 编码/解码有关。尝试更简单的对象,使用数字和纯字符串,然后使用带引号的 HTML。

              在 JSON 工作后,您真的应该考虑从那里删除 HTML。更好的是只移动数据,并将演示细节留给模板。使用 AJAX 时,这意味着 HTML 中的隐藏模板,并使用 jQuery 复制它并填充数据。检查任何 jQuery template plugins。其中,jTemplates 是大家的最爱。

              【讨论】:

              • 在我添加 HTML 之前它工作正常......但它只是几个 H1 标签。我试图以各种方式摆脱它们,但似乎没有任何解决办法。
              • 当它找到 HTML 时,它会是你的服务器破坏 JSON 的那个吗?
              【解决方案10】:

              我认为你问错了问题。使用 $.getJSON() 更容易,如果你遇到问题,最好请求 $.getJSON() 而不是 $.ajax()。 您可能还会发现查看 getJSON 函数源代码很有用,因为我知道,您在 mimeTypes 那里有很多无用的东西。不是这样的。

              【讨论】:

                【解决方案11】:

                您尝试解析的值包含在括号 [] 中,这意味着它是一个数组。您正在尝试评估数组。尝试评估数组的第一个元素,它应该可以工作......

                var json = eval("("+data[0]+");");
                

                另外,我建议使用 here 提供的 JSON.parse() 而不是直接调用 eval()。

                【讨论】:

                • 这看起来很有希望。它现在通过了 eval(),但 json var 显示为未定义。
                【解决方案12】:

                我收到了类似的错误。我花了一段时间才知道——我几乎不知道 PHP 自 PHP5.2 以来(本机)不支持 JSON。重要提醒...

                【讨论】:

                  【解决方案13】:

                  昨天在$。 ajax还是没有错误,今天是引用错误,有人说是parsererror jquery版本的问题,我用的是jquery-1.3.2.min.js,昨天。这版也做了,今天洗白了。数据来源:无变化。不知道是什么原因?

                  【讨论】:

                    【解决方案14】:

                    可能是因为你的输出缓冲区不是空的,所以 AJAX 接收到的字节不属于 JSON。

                    在使用echodie() 输出您的json 之前,在服务器端尝试使用ob_clean() 清理缓冲区。而且你不需要指定contentType,我认为你的默认值可以正常工作。

                    我遇到了同样的问题,它解决了。

                    希望能帮到你。

                    【讨论】:

                      【解决方案15】:

                      在我的例子中,错误是由 json 中的 html 标签引起的。

                      不正确(解析器错误)

                      {"msg": "Gracias,< br >Nos pondremos en contacto."}
                      

                      正确

                      {"msg": "Gracias, nos pondremos en contacto."}
                      

                      浏览器:IE7/IE8

                      【讨论】:

                      • 如果我的回复肯定包含 IE7/IE8 的 html 标签,有什么办法吗
                      【解决方案16】:

                      也试试这个

                      $.ajax({
                          url: url,
                          data:datas,
                          success:function(datas, textStatus, jqXHR){
                          var returnedData = jQuery.parseJSON(datas.substr(datas.indexOf('{')));
                      })};
                      

                      在我的情况下,服务器在“{”之前以未知字符响应

                      【讨论】:

                        【解决方案17】:

                        不要使用数组框,并确保正确格式化数据:

                        {"account":{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}}
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-01-28
                          • 1970-01-01
                          • 2011-02-13
                          • 2012-10-13
                          • 2017-07-31
                          • 1970-01-01
                          相关资源
                          最近更新 更多