15

我尝试使用 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 获取这些数据的东西。有没有人有任何想法?

4

17 回答 17

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" 
});

他们都为我工作得很好。

于 2009-03-10T18:46:47.483 回答
3

If anyone is still having problems with this it's because your response needs to be a JSON string and content-type "application/json".

Example for HTTP in asp.net (c#):

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

hth,

Matti

于 2010-03-17T18:43:14.813 回答
1

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

于 2009-03-10T17:32:23.387 回答
1

您可以将其作为文本返回,然后使用json.org 解析器
对其进行解析 以查看其工作方式是否有所不同

于 2009-03-10T17:36:04.517 回答
1

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

错误组合:jQuery 1.4、ajax/json、Firebug Lite 和 IE 8

于 2011-01-29T07:03:33.050 回答
1

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

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

应该读

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

这也有很大的不同。

于 2009-11-24T20:49:45.957 回答
1

删除JsonData前面和最后一个[],它就可以工作了。

于 2010-02-01T11:31:42.897 回答
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}]
于 2012-07-23T17:32:02.020 回答
0

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

于 2010-12-22T03:59:25.683 回答
0

也试试这个

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

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

于 2012-04-06T12:37:37.683 回答
0

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

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

于 2009-03-10T17:57:45.980 回答
0

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

于 2009-03-10T18:07:20.260 回答
0

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

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

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

于 2009-03-10T18:11:49.097 回答
0

就我而言,错误是由 json 中的 html 标签引起的。

不正确(解析器错误)

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

正确的

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

浏览器:IE7/IE8

于 2011-12-21T12:52:17.193 回答
0

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

{"account":{"iId":"1","heading":"Management Services","body":"<h1>Program Overview</h1><h1>January 29, 2009</h1>"}}
于 2013-11-30T14:01:51.987 回答
0

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

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

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

希望能帮到你。

于 2011-05-10T09:28:37.783 回答
0

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

于 2010-05-24T04:24:40.877 回答