簡體   English   中英

無法解析JQuery ajax調用返回的JSON

[英]Unable to parse JSON returned by JQuery ajax call

我正在使用下面給出的JQuery ajax調用方法

$.post('../User/GetCountry',
        {
            zone: 1
        },
        function (data) {
            alert(data);
            alert(data["Countries"]);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
            //alert(textStatus);
        });

C#代碼

public static string GetCountry()
    {
        var result = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Countries.GetAll());
        return result;
    }

現在,當我在服務器端調試代碼時,我看到以下結果,對我來說,這是完美的json

[{"Id":4,"Name":"France"},{"Id":3,"Name":"Germany"}]

但是在javascript中,我正在將json作為

[[object Object],[object Object]]

誰能讓我知道我在這里想念什么

解決方法使用var jsonData = JSON.stringify(data); var jsonParse = JSON.parse(jsonData);

您的代碼存在一些問題。 首先,盡管您實際上將參數zone傳遞給Web服務方法,但該方法本身並未收到該參數。 其次,如果要返回JSON,請不要使用返回類型字符串。 使用JSONResult 這也將允許您刪除static關鍵字。 我建議像這樣更改您的方法:

public JSONResult GetCountry(int? zone)
{
    // ...
}

您應該做兩個最后的更改。 第一種是使用ASP.Net MVC內置的Json()方法來處理對象的序列化。 第二個問題是,即使數據層結果恰好在您要使用的結構中,也應始終對其進行投影。 這樣,如果您以破壞服務的方式更改數據層對象,則會收到編譯錯誤,而不是運行時異常。

return Json(from c in Countries.GetAll() select new { Id = c.Id, Name = c.Name })

我還建議避免使用$.get$.post因為它們會抽象掉訪問Web服務時可能有用的設置。 如果您想簡化它,我建議將$.ajax調用包裝在您自己的函數中。 您還將要考慮標准化您的Web服務響應。 您的Web服務是一種協議,因此,它具有定義明確的標頭,因此會受益。 有關更深入的解釋,請看這里: 基於MVC服務的Web應用程序簡介

嘗試這個 :

alert(data[0].Name)
$.ajax({
    type: 'POST',
    url: '../User/GetCountry',
    data: {
        zone: 1
    },
    success: function(data) { alert('data: ' + data); },
    contentType: "application/json",
    dataType: 'json'
});

對我有用。 您需要確保發送的內容類型為“ application / json”,最好使用ControllerJson() helper方法。

搜索更多后解決了這個問題

$.post('../User/GetCountry',
    {
        zone: 1
    },
    function (data) {
        var jsonData = JSON.stringify(data); 
        var jsonParse = JSON.parse(jsonData);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
          alert(textStatus);
    });

嘗試使用JSON.parse():

$.post('../User/GetCountry',
        {
            zone: 1
        },
        function (data) {
            data=JSON.parse(data)

            alert(data["Countries"][0].Name);
        }, "json").fail(function (jqXHR, textStatus, errorThrown) {
            //alert(textStatus);
        });

暫無
暫無

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

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