Json 从网络获取值时出现解析错误 api 2
Json Parse Error when getting value from web api 2
我开发了一个简单的 WebAPI 2 应用程序,其中包含此 get 方法:
public HttpResponseMessage Get(int id)
{
var x = db.TESTS.ToList();
var formatter = new JsonMediaTypeFormatter();
return Request.CreateResponse(HttpStatusCode.OK, x, formatter);
}
我查过了。它正在返回 Json 值。我也在Fiddler里面查了下
但是当我想在一个简单的 html 文件中检索它时,我遇到了解析错误。我的 Web 服务发布在本地主机上。
Web 服务 url:http://192.168.5.154/mobileapi/api/values/2 正在返回
[{"ID":2.0,"TEXT":"test 2"},{"ID":1.0,"TEXT":"test"}]
这是代码。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Get Json value from WebAPI url</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<script type="text/javascript">
jQuery(document).ready(function ($) {
jQuery.ajax({
type: "GET",
url: "http://192.168.5.154/mobileapi/api/values/2?callback=?",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, status, jqXHR) {
alert("data is available");
},
error: function (jqXHR, status) {
alert(status);
}
});
});
</script>
</body>
</html>
更新您的控制器代码:
using System.Web.Script.Serialization;
[HttpGet]
public JsonResult Get(int id)
{
var ListOfMyObject = db.TESTS.ToList();
JavaScriptSerializer jss = new JavaScriptSerializer();
string output = jss.Serialize(ListOfMyObject);
return Json(output , JsonRequestBehavior.AllowGet);
}
从这里往上读。 Why is JsonRequestBehavior needed?
Alhamdulillah,这已经解决了。
需要在 Web 服务上启用 CORS。
步骤。
1. 从 Nuget 包安装 Microsoft ASP.NET Web API 2.2...5.2.3
2.在WebApiConfig
中添加config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
我的 Json html 中的代码是:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Get Json value from WebAPI url</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<script type="text/javascript">
var getJSON = function (url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.responseType = 'json';
xhr.onload = function () {
var status = xhr.status;
if (status == 200) {
resolve(xhr.response);
} else {
reject(status);
}
};
xhr.send();
});
};
getJSON('http://192.168.5.154/mobileapi/api/values/2').then(function (data) {
//alert('Your Json result is: ' + data.result); //you can comment this, i used it to debug
//alert(data.TEXT);
result.innerText ="Oracle Data\nId: " + data.ID + "\nText: "+ data.TEXT; //display the result in an HTML element
}, function (status) { //error detection....
alert('Something went wrong.');
});
</script>
<div id="result" style="color:red"></div>
</body>
</html>
我的网络服务代码是:
public IHttpActionResult Get(int id)
{
var product = db.TESTS.FirstOrDefault((p) => p.ID == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
我开发了一个简单的 WebAPI 2 应用程序,其中包含此 get 方法:
public HttpResponseMessage Get(int id)
{
var x = db.TESTS.ToList();
var formatter = new JsonMediaTypeFormatter();
return Request.CreateResponse(HttpStatusCode.OK, x, formatter);
}
我查过了。它正在返回 Json 值。我也在Fiddler里面查了下
但是当我想在一个简单的 html 文件中检索它时,我遇到了解析错误。我的 Web 服务发布在本地主机上。
Web 服务 url:http://192.168.5.154/mobileapi/api/values/2 正在返回
[{"ID":2.0,"TEXT":"test 2"},{"ID":1.0,"TEXT":"test"}]
这是代码。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Get Json value from WebAPI url</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<script type="text/javascript">
jQuery(document).ready(function ($) {
jQuery.ajax({
type: "GET",
url: "http://192.168.5.154/mobileapi/api/values/2?callback=?",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, status, jqXHR) {
alert("data is available");
},
error: function (jqXHR, status) {
alert(status);
}
});
});
</script>
</body>
</html>
更新您的控制器代码:
using System.Web.Script.Serialization;
[HttpGet]
public JsonResult Get(int id)
{
var ListOfMyObject = db.TESTS.ToList();
JavaScriptSerializer jss = new JavaScriptSerializer();
string output = jss.Serialize(ListOfMyObject);
return Json(output , JsonRequestBehavior.AllowGet);
}
从这里往上读。 Why is JsonRequestBehavior needed?
Alhamdulillah,这已经解决了。
需要在 Web 服务上启用 CORS。
步骤。 1. 从 Nuget 包安装 Microsoft ASP.NET Web API 2.2...5.2.3 2.在WebApiConfig
中添加config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
我的 Json html 中的代码是:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Get Json value from WebAPI url</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<script type="text/javascript">
var getJSON = function (url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.responseType = 'json';
xhr.onload = function () {
var status = xhr.status;
if (status == 200) {
resolve(xhr.response);
} else {
reject(status);
}
};
xhr.send();
});
};
getJSON('http://192.168.5.154/mobileapi/api/values/2').then(function (data) {
//alert('Your Json result is: ' + data.result); //you can comment this, i used it to debug
//alert(data.TEXT);
result.innerText ="Oracle Data\nId: " + data.ID + "\nText: "+ data.TEXT; //display the result in an HTML element
}, function (status) { //error detection....
alert('Something went wrong.');
});
</script>
<div id="result" style="color:red"></div>
</body>
</html>
我的网络服务代码是:
public IHttpActionResult Get(int id)
{
var product = db.TESTS.FirstOrDefault((p) => p.ID == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}