首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

jquery ajax 调用 .net web api 疏失

2013-12-29 
jquery ajax 调用 .net web api 出错项目用jquery ajax 调用 .net web api。$.support.cors true$.ajax(

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架构开发,还是学习了 

热点排行