win7+vs2015
接口是:ASP.NET Core1.0 Web API项目 方法是
[HttpGet]
public List<Person> Get()
{
List<Person> list = new List<Person>() { new Person { tname = "ffdfd", name = "name" }, new Person { tname = "fdfd", name = "name2" } };
return list;
}
public class Person
{
public string tname { get; set; }
public string name { get; set; }
}
新建一个web项目
建立一个index.html调用api接口
方法是:$.ajax({
url: url, //请求的url
dataType: "json",
//jsonpCallback: "jsonpCallback",
success: function (json) {
alert(json[0].tname);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
但是status=0 readyState=0 请求失败
通过在网上查找发现很多的方法提示需要跨域请求如
$.ajax({
url: url,
dataType: 'jsonp',
jsonp: 'callback',//回调函数名字
jsonpCallback: 'success_jsonpCallback',//可以不写,也可以自定义,用来取代 jQuery 自动生成的随机函数名,不写将由jq自动生成,每次生成的结果都不一样
// processData: true,
type: 'get',
success: function (json) {
console.log(json);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
结果是:status=200 readyState=4,响应成功但是提示“parseerror”,一直以为的是html页面的ajax请求有问题,试了很多方法,大同小异,都是parseerror
今天在群里有人提示我是不是在Web API里没有设置跨域的问题呢?
在网上找到一段代码,在web.confign文件里的<system.webServer>里加上以下代码
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
</customHeaders>
</httpProtocol>
,然后用 $.ajax({
url: url, //请求的url
dataType: "json",
success: function (json) {
alert(json[0].tname);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
再次请求,就可以得到json里的数据了。