[英]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”,最好使用Controller
的Json()
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.