首页 新闻 会员 周边

关于ajax跨域请求的问题!

0
悬赏园豆:50 [已解决问题] 解决于 2015-12-01 12:08
context.Response.AddHeader("Access-Control-Allow-Origin", allowHost);
        context.Response.AddHeader("P3P", "CP=CAO PSA OUR");
        context.Response.AddHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
        context.Response.AddHeader("Access-Control-Allow-Headers", "Origin,No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
        context.Response.AddHeader("Access-Control-Allow-Credentials", "true");
        context.Response.AddHeader("Access-Control-Max-Age", "1728000");

后台代码如上!还是无法跨域访问!!!用的是XMLHttpRequest 请问是不是要XMLHttpRequest里设置一个什么参数?

问题补充:

我记得jquery里的ajax 设置crossDomain:true可以解决 但是XMLHttpRequest该如何操作?????????????

OPTIONS请求返回不支持跨域!!
补充部分js

 var self = this,
                xhr = new XMLHttpRequest();

            task.xhr = xhr;

            xhr.upload.addEventListener("progress", function (e) {
                self.progress(task, e.total, e.loaded);
            }, false);

            xhr.addEventListener("load", function (e) {
                self.complete(task, UPLOAD_STATE_COMPLETE, e.target.responseText);
            }, false);

            xhr.addEventListener("error", function () {
                self.complete(task, UPLOAD_STATE_ERROR);
            }, false);

            xhr.addEventListener("abort", function () {
                self.complete(task, UPLOAD_STATE_CANCEL);
            }, false);

            var fd = new FormData;

            //处理上传参数
            self._process_params(task, function (k, v) {
                fd.append(k, v);
            });

            fd.append("fileName", task.name);
            fd.append(self.upName, task.blob || task.file, task.name);

            xhr.open("POST", task.url);

            xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

            self.fire("send", task, function (result) {
                if (result === false) return self.complete(task, UPLOAD_STATE_SKIP);

                xhr.send(fd);

                self._afterSend(task);
            });
丫的的主页 丫的 | 小虾三级 | 园豆:1575
提问于:2015-12-01 10:55
< >
分享
最佳答案
0

我已经解决了 

if (request.HttpMethod.Equals("options",StringComparison.CurrentCultureIgnoreCase)
        {
             context.Response.StatusCode=204;
        }
 xhr.withCredentials = false;

还要设置iis支持options请求 默认是post,get

丫的 | 小虾三级 |园豆:1575 | 2015-12-01 12:06
其他回答(5)
0

C#代码写,不用ajax。

收获园豆:5
WikiZhao | 园豆:200 (初学一级) | 2015-12-01 11:03

不知道你在说什么!

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2015-12-01 11:03

@丫的: ajax情况下即使加这些也是起不到效果的,用后台代码写

支持(0) 反对(0) WikiZhao | 园豆:200 (初学一级) | 2015-12-01 11:07

@WikiZhao: 我说 前面的就是C#代码好吧 看清楚。。。

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2015-12-01 11:07
0

我之前用浏览器Chrome解决过一次跨域访问的问题: 在chrome启动方式后面加上--disable-web-security就ok了

收获园豆:5
Alawn_wu | 园豆:204 (菜鸟二级) | 2015-12-01 11:12

~~哎手机咋办!html5的

 

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2015-12-01 11:13

@丫的: 不好意思,手机端没有解决过 

支持(0) 反对(0) Alawn_wu | 园豆:204 (菜鸟二级) | 2015-12-01 11:16
0

记得有个jsop这个可以解决跨域访问

收获园豆:5
我是糖糖 | 园豆:446 (菜鸟二级) | 2015-12-01 11:13

jsonp容量太小 不能用~

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2015-12-01 11:14

@丫的: 好啊.苦逼

支持(0) 反对(0) 我是糖糖 | 园豆:446 (菜鸟二级) | 2015-12-01 11:16
0

看你的代码你是想使用CORS~请参考 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS  

收获园豆:30
幻天芒 | 园豆:37175 (高人七级) | 2015-12-01 11:32
0

现在公司项目遇到的问题,用代理服务器 nginx

收获园豆:5
until-u | 园豆:225 (菜鸟二级) | 2015-12-01 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册