2012-10-18 54 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