【发布时间】:2018-05-15 12:42:42
【问题描述】:
在 ASP.NET MVC 5 中使用 JQuery AJAX 的 Web API 出现错误“无效或意外令牌”
我已经使用 MVC 创建了一个 Web API 项目。其中包含具有 Action 方法索引的 HomeController
public ActionResult Index()
{
return View();
}
对于上述操作方法,我想在 javascript 警报消息中显示来自 ajax 调用的员工详细信息
@{
Layout = null;
}
<script src="~/Script/jquery-1.10.2.min.js"></script>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index<title>
<head>
<body>
<div><h2>You Are On View</h2><div>
</body>
<script>
$(document).ready(function () {
$.ajax({
type: 'GET',
url: "http://localhost:802/api/Employee/GetEmployee?Id=101",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function (data) {
alert(data);
},
failure: function (data) {
alert("Failure: "+ data);
},
error: function (data) {
alert("Error: "+ data);
}
});
});
</script>
</html>
我还创建了一个如下的 api 控制器,它将返回员工详细信息
public class EmployeeController : ApiController
{
public Employee GetEmployee(int Id)
{
Employee objEmp = new Employee();
objEmp = ; // get data from service
return objEmp;
}
}
我在控制台中收到类似“Uncaught SyntaxError: Invalid or unexpected token”的错误。
如果我点击控制台中的错误,那么我得到的结果是
{ "EmpId": "101","Name": "Rupesh" }
我尝试过的:
我尝试了以下解决方案 1)http://www.c-sharpcorner.com/article/call-web-api-using-jquery-ajax-in-asp-net-core/
2) 还添加了标头并将数据类型从 json 更改为 jsonp
dataType: "jsonp",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
3) 我也试过了
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:802/api/Employee/GetEmployee?Id=101", true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4)
{
alert(xhr);
}
}
xhr.send();
4) 还添加了标题
"Access-Control-Allow-Headers":"Content-Type",
"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Origin": "*",
"cache-control":"no-cache"
【问题讨论】:
-
问题是因为您返回的是 JSON,而不是 JSONP。更改
$.ajax调用中的dataType属性。如果您提出本地请求,也不需要 CORS。我建议也为您的 AJAX 请求使用相对路径
标签: jquery asp.net ajax model-view-controller