如何使用 ajax 在 JavaScript 中获取 MVC 控制器 json 数据
How to get MVC Controller json data in JavaScript using ajax
我正在使用 .NET C# MVC/API 项目。在 Controller 中,我有以下代码:
[HttpGet]
public ActionResult ArcGISinit()
{
var jsonString = "[{ 'number': '555', 'api': '777', 'text': 'text'}]";
return Json(jsonString, JsonRequestBehavior.AllowGet);
}
然后在我的脚本文件中,我可以像这样得到上面的数据:
// Path to the above **Controller**
var serviceURL = "...";
var respOriginal = [{ "number": 555, "api": "777", "text": text }];
$.ajax({
type: "GET",
url: serviceURL,
contentType: "application/json;",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
// Probably don't need this
resp = JSON.stringify(data);
console.log("data:");
console.log(data);
console.log("respOriginal:");
console.log(respOriginal);
}
function errorFunc() {
alert('MVC controller call failed.');
}
这是我在 Chrome 调试器中看到的东西,在来自 MVC Controller 的 data 中,我得到这个(纯字符串):
[{ 'number': '555', 'api': '777', 'text': 'text'}]
但是对于脚本文件中的 respOriginal,我得到这个
[Object]
展开对象时(respOriginal 中的数据)看起来格式正确,如下所示:
number : 555
api : 777
text : "text"
如何使来自 MVC Controller 的 data 看起来像 respOriginal 中的数据?
制作一个匿名对象或传入任何类似于您的结构的 class 实例...对象周围有方括号,所以我猜它是一个数组:
[HttpGet]
public ActionResult ArcGISinit()
{
object[] yourObjectArray = new object[]{ new { number = 555, api = 777, text = "text"} };
return Json(yourObjectArray , JsonRequestBehavior.AllowGet);
}
一个合适的 class 应该是这样的:
public class YourClass
{
public int number {get;set;}
public int api {get;set;}
public string text {get;set;}
}
在控制器上:
[HttpGet]
public ActionResult ArcGISinit()
{
YourClass[] yourClassArray = new Yourclass[]{ new Yourclass { number = 555, api = 777, text = "text"} };
return Json(yourClassArray , JsonRequestBehavior.AllowGet);
}
如果您使用 List
,将以相同的方式工作
我建议为 API 功能创建 WebAPI 控制器,它更灵活,开箱即用。此外,您将 API 与视图分开,只需更改 HttpStatusCode 参数
即可进行 401 或错误处理
[HttpGet]
public async Task<HttpResponseMessage> ArcGISinit()
{
var yourObjectArray = new object[] { new { number = 555, api = 777, text = "text" } };
return Request.CreateResponse(HttpStatusCode.OK, yourObjectArray);
}
对于 JS,你是对的,你不需要 stringfy(也就是说,当你想将 JS 对象转换为 JSON 格式的字符串时),只需使用像 data.number[= 这样的变量11=]
我正在使用 .NET C# MVC/API 项目。在 Controller 中,我有以下代码:
[HttpGet]
public ActionResult ArcGISinit()
{
var jsonString = "[{ 'number': '555', 'api': '777', 'text': 'text'}]";
return Json(jsonString, JsonRequestBehavior.AllowGet);
}
然后在我的脚本文件中,我可以像这样得到上面的数据:
// Path to the above **Controller**
var serviceURL = "...";
var respOriginal = [{ "number": 555, "api": "777", "text": text }];
$.ajax({
type: "GET",
url: serviceURL,
contentType: "application/json;",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
// Probably don't need this
resp = JSON.stringify(data);
console.log("data:");
console.log(data);
console.log("respOriginal:");
console.log(respOriginal);
}
function errorFunc() {
alert('MVC controller call failed.');
}
这是我在 Chrome 调试器中看到的东西,在来自 MVC Controller 的 data 中,我得到这个(纯字符串):
[{ 'number': '555', 'api': '777', 'text': 'text'}]
但是对于脚本文件中的 respOriginal,我得到这个
[Object]
展开对象时(respOriginal 中的数据)看起来格式正确,如下所示:
number : 555
api : 777
text : "text"
如何使来自 MVC Controller 的 data 看起来像 respOriginal 中的数据?
制作一个匿名对象或传入任何类似于您的结构的 class 实例...对象周围有方括号,所以我猜它是一个数组:
[HttpGet]
public ActionResult ArcGISinit()
{
object[] yourObjectArray = new object[]{ new { number = 555, api = 777, text = "text"} };
return Json(yourObjectArray , JsonRequestBehavior.AllowGet);
}
一个合适的 class 应该是这样的:
public class YourClass
{
public int number {get;set;}
public int api {get;set;}
public string text {get;set;}
}
在控制器上:
[HttpGet]
public ActionResult ArcGISinit()
{
YourClass[] yourClassArray = new Yourclass[]{ new Yourclass { number = 555, api = 777, text = "text"} };
return Json(yourClassArray , JsonRequestBehavior.AllowGet);
}
如果您使用 List
我建议为 API 功能创建 WebAPI 控制器,它更灵活,开箱即用。此外,您将 API 与视图分开,只需更改 HttpStatusCode 参数
即可进行 401 或错误处理[HttpGet]
public async Task<HttpResponseMessage> ArcGISinit()
{
var yourObjectArray = new object[] { new { number = 555, api = 777, text = "text" } };
return Request.CreateResponse(HttpStatusCode.OK, yourObjectArray);
}
对于 JS,你是对的,你不需要 stringfy(也就是说,当你想将 JS 对象转换为 JSON 格式的字符串时),只需使用像 data.number[= 这样的变量11=]