簡體   English   中英

JQuery getJSON - ajax parseerror

[英]JQuery getJSON - ajax parseerror

我試圖用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獲取此數據的內容。 有沒有人有任何想法?

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

他們都對我很好。

如果有人仍然遇到問題,那是因為你的響應需要是一個JSON字符串和內容類型“application / json”。

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

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

心連心,

馬蒂

這是一個有效的例子並經過測試!

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

請注意,在問題中存在語法錯誤。 這條線

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

應該讀

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

這也有很大的不同。

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

禁用Firebug Lite為我解決了這個問題。

組合的錯誤:jQuery 1.4,ajax / json,Firebug Lite和IE 8

您是否嘗試過對HTML進行XML編碼(即&lt; H1&gt;)?

您可以將其作為文本返回,然后使用json.org解析器進行解析
看它是否有所不同

也嘗試這個

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

在我的情況下,服務器在'{'之前以未知字符響應

不要使用數組框,並確保正確格式化數據:

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

我收到了類似的錯誤。 花了一些時間才發現 - 我很少知道PHP自PHP5.2起就沒有(本機地)支持JSON。 關鍵提醒......

昨天在$。 Ajax仍然沒有錯誤,今天引用了錯誤,有人說parsererror jquery版本的問題,我用的是jquery-1.3.2.min.js,昨天。 這個版本也完成了,今天就被淘汰了。 數據來源:沒有變化。 不知道是什么原因?

這可能是因為您的輸出緩沖區不為空,因此AJAX接收不屬於JSON的字節。

在使用echodie()輸出json之前,嘗試使用服務器端的ob_clean()清理緩沖區。 而且您不需要指定contentType ,我認為您的默認值將正常工作。

我有同樣的問題,它解決了它。

希望能幫到你。

首先,嘗試確定問題是否與一般JSON編碼/解碼有關。 嘗試使用數字和普通字符串的簡單對象,然后使用帶引號的HTML。

在讓JSON工作之后,你真的應該考慮從那里刪除HTML。 更好的方法是移動數據,並將演示文稿詳細信息留給模板。 使用AJAX時,這意味着HTML中的隱藏模板,並使用jQuery復制它並填充數據。 檢查任何jQuery 模板插件 其中, jTemplates是最受歡迎的。

我想你問的是錯誤的問題。 使用$ .getJSON()要容易得多,如果你遇到問題,最好還是要求$ .getJSON()而不是$ .ajax()。 您可能還會發現有用的getJSON函數源代碼,因為我看到,你在mimeTypes中有很多無用的東西。 那不是那樣的。

您嘗試解析的值包含在方括號[]中,這意味着它是一個數組。 您正在嘗試評估數組。 嘗試評估數組的第一個元素,它應該工作...

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

另外,我建議使用此處提供的JSON.parse()而不是直接調用eval()。

在我的情況下,錯誤是由json中的html標記引起的。

INCORRECT(parsererror)

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

正確

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

瀏覽器:IE7 / IE8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM