JQuery getJSON - ajax parseerror

时间:2009-03-10 17:25:10

标签: javascript jquery ajax json eval

我试图用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(内容类型标题,格式的其他变体等),eval都会出现错误。

我想到的是,在JSON中返回HTML并解析它似乎存在问题。但是,我希望我可能错过了一些允许我通过JSON获取此数据的内容。有没有人有任何想法?

17 个答案:

答案 0 :(得分:7)

您拥有的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" 
});

他们都对我很好。

答案 1 :(得分:3)

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

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

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

HTH,

马蒂

答案 2 :(得分:1)

您可以将其作为文本返回,然后使用json.org parser解析它 看它是否有所不同

答案 3 :(得分:1)

这是一个有效的例子并经过测试!

<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}]

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

删除JsonData上前面和后面的[],它可以正常工作。

答案 6 :(得分:1)

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

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

应该阅读

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

这也有很大的不同。

答案 7 :(得分:1)

您是否尝试对HTML进行XML编码(即&amp; lt; H1&amp; gt;)?

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我收到了类似的错误。花了一些时间才发现 - 我很少知道PHP自PHP5.2起就没有(本机地)支持JSON。关键提醒......

答案 11 :(得分:0)

昨天在$。 Ajax仍然没有错误,今天引用了错误,有人说parsererror jquery版本的问题,我用的是jquery-1.3.2.min.js,昨天。这个版本也完成了,今天就被淘汰了。数据来源:没有变化。不知道是什么原因?

答案 12 :(得分:0)

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

在您使用JSON之后,您真的应该考虑从那里删除HTML。更好的方法是移动数据,并将演示文稿详细信息留给模板。使用AJAX时,这意味着HTML中的隐藏模板,并使用jQuery复制它并填充数据。检查任何jQuery template plugins。其中,jTemplates是最受欢迎的。

答案 13 :(得分:0)

可能是因为您的输出缓冲区不为空,因此AJAX接收不属于JSON的字节。

在输出带有ob_clean()echo的json之前,尝试在服务器端使用die()的干净缓冲区。而且您不需要指定contentType,我认为您的默认值将正常工作。

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

希望能帮到你。

答案 14 :(得分:0)

在我的情况下,错误是由json中的html标记引起的。

INCORRECT(parsererror)

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

CORRECT

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

浏览器:IE7 / IE8

答案 15 :(得分:0)

也试试这个

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

在我的情况下,服务器在'{'

之前以未知字符响应

答案 16 :(得分:0)

请勿使用数组框,并确保正确格式化数据:

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