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里的数据了。
