读书人

jquery ajax 调用 .net web api 疏失

发布时间: 2013-12-29 13:07:03 作者: rapoo

jquery ajax 调用 .net web api 出错
项目用jquery ajax 调用 .net web api。
$.support.cors = true;
$.ajax({
type: "GET",
url: "http://www.xxx.com/api/Subject/GetSubject",
dataType: "json",
data: {id:"123"},
//async: false,
processData: true,
//crossDomain: true,
success: function (html) {
alert("成功!");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("出错!");

}
});
症状如下:
web api在本地的时调用正常(web api 和 web 在localhost 的不同端口(也算是跨域))。
web api发布以后,再调用时,ie10正常获取数据,ie9、ie8都报错。
经过跟踪jquery库,可能出问题的有两处:

function createStandardXHR() {

try {

return new window.XMLHttpRequest();

} catch( e ) {}

}


function createActiveXHR() {

try {

return new window.ActiveXObject("Microsoft.XMLHTTP");

} catch( e ) {}

}




new window.XMLHttpRequest(); 返回 完成该操作所需的数据还不可使用。

另外一处是
send: function( headers, complete ) {}方法体中
xhr.open( s.type, s.url, s.async ); 这句抛出异常,
message:"拒绝访问。\r\n"
number:-2147024891

请大侠们指点迷津。









[解决办法]

引用:
不同端口也是跨域吧
发布后web项目和web api项目域名不同,肯定跨域。

IE端口不一致可以请求


设置Access-Control-Allow-Origin响应头允许跨域请求,或者用JSONP操作

如果不是你的站点,无法管理,只能本站做代理,代理页面捉取跨域的内容输出,ajax请求本站的代理页面
[解决办法]
本帖最后由 showbo 于 2013-10-18 16:44:10 编辑 http://www.xxx.com/api/Subject/GetSubject

Response.Write(Request.QueryString["callback"]+"({data:1234565})");



$.ajax({
type: "GET",
url: "http://www.xxx.com/api/Subject/GetSubject?callback=?",
dataType: "jsonp",
data: { id: "123" },
//async: false,
processData: true,
//crossDomain: true,
success: function (o) {alert(o.data)
alert("成功!");


},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("出错!");

}
});


jsonp其实就是script加载动态页,动态页输出符合js语法的代码就行了,其中动态页要接收回调函数
[解决办法]
虽然还没有加入B/S架构开发,还是学习了

读书人网 >Ajax

热点推荐