2012-10-18 107 views
1

我按照這裏的說明Problem performing Ajax call from ASP.NET MVC2 app,並閱讀了關於JSON。我搜查了很多,但沒有找到答案。我使用下面的代碼:JSON響應字段未定義

觀點:

<script type="text/javascript"> 
var userName = $("#userName").val(); 

$.ajax({ 
    type: 'POST', 
    url: '/Home/PgAJAXTest', 
    data: { 
     q: 'Test1', 
     s: 'Test2' 
    }, 
    success: function (bbb) { 
     alert(bbb.Val13); 
    }, 
    error: function (msg) { 
     alert("error"); 
    } 
}); 

</script> 

ASP.NET MVC控制器代碼:

[HttpPost] 
    public JsonResult PgAJAXTest(string q, string s) 
    { 
     var a = Json(new { Val13 = " TEST " }); 
     return a; 
    } 

的問題是,我得到"undefined"
如果我改變alert(bbb.Val13);alert(bbb);我得到{"Val13":" TEST "}

我想這事做與控制器沒有在JSON預計格式恰好返回JSON。

回答

3

你重新得到一個字符串響應。

使用類似

success: function (bbb) { 
    var response = jQuery.parseJSON(bbb); 
    alert(response.Val13); 
} 

既然你使用jQuery,您可以使用jQuery.parseJSON解析字符串。

+0

是的,這解決了它謝謝!但是,我如何獲得常規的JSON響應(所以我可以使用bbb.Val13)? – Clangon

+0

您的回覆來自http,所以默認結果是一個字符串。你可以像上面那樣解析JSON,或者通過設置'datatype:'json''來獲取請求,讓jQuery爲你做。 – nunespascal

+0

@tereško是的,我同意使用'JSON.parse'或'jQuery.parseJSON'更好。更新了我的答案。 – nunespascal

0

試試這個

[HttpPost] 
    public JsonResult PgAJAXTest(string q, string s) 
    { 
     return Json(new { Val13 = " TEST " }); 
    } 
+0

這只是重新考慮因素,並沒有解決他的問題。 – Niklas

+0

這有同樣的問題。我只添加了「a」變量,所以我可以更容易地進行調試。 – Clangon

+0

對不起,請種薯mattytommo的回答 –

1

您需要添加datatype: 'json'您JQuery的AJAX請求。

嘗試:

<script type="text/javascript"> 
var userName = $("#userName").val(); 

$.ajax({ 
    type: 'POST', 
    datatype: 'json', 
    url: '/Home/PgAJAXTest', 
    data: { 
     q: 'Test1', 
     s: 'Test2' 
    }, 
    success: function (bbb) { 
     alert(bbb.Val13); 
    }, 
    error: function (msg) { 
     alert("error"); 
    } 
}); 

</script> 
+1

是的,你是賴特。但你搞砸了引號dataType:'json' –

+1

這似乎沒有幫助。 – Clangon

+0

@Clangon嗯,你的代碼是否像發佈一樣?這聽起來像JS中使用的變量名稱和創建中的JSON對象創建是不同的,即使它們由大寫字母不同,它仍然計數。 – mattytommo