asp.net ashx 跨域问题

ajax请求jsonp出错问题参考:https://blog.csdn.net/qq_15260769/article/details/80701647

sonp跨域+ashx(示例):https://www.cnblogs.com/xishuai/p/3552919.html

跨域解决方案二:使用JSONP实现跨域:https://www.cnblogs.com/choon/p/5393682.html

ashx文件获取$.ajax()方法发送的数据:https://www.cnblogs.com/xdp-gacl/p/3462349.html

map:https://blog.csdn.net/qq_22642239/article/details/76014591

1、js部份

$(document).ready(function () {
    $.ajax({
        type: "get",//jsonp只能用get;
        url: "http://qmdweb.xicp.net:56980/ContentViews/MailMeunService.ashx",
        dataType: "jsonp",
        //jsonp:"callback",
        //jsonpCallback:"success_jsonp",
        //timeout:3000,
        //dataFilter:function(data){
        	//data=eval("("+data+")");
        //	return data;
       // },
        success: function (data,textStatus) {
        	data=JSON.parse(Decrypt(data));//请求数据在后台已加密,这里解密并转成JSON对象
        	//data=eval("("+data+")");
            console.log(data);
        },
        error:function(XMLHttpRequest,textStatus,errorThrown){
        	console.log(textStatus);
        }
    });
});

ashx C#处理部份

public void ProcessRequest(HttpContext context)
    {
        //context.Response.AddHeader("Access-Control-Allow-Origin", "*");
        context.Response.ContentType = "text/plain";
        string callback = HttpContext.Current.Request["callback"];
        //context.Response.ContentType = "application/json";
        context.Response.ContentEncoding = System.Text.Encoding.UTF8;
        JavaScriptSerializer jss = new JavaScriptSerializer();
        var datas = string.Format("{0}('{1}');",callback,AESHelper.Encrypt(jss.Serialize(new { meunList = MeunsList(), webSite = WebSite() })));
//这点的处理很重要 回调脚本,形如handler('responseData');其中AESHelper.Encrypt(jss.Serialize(new { meunList = MeunsList(), webSite = WebSite() }))为处理数据对象并加密

        context.Response.Write(datas);
        //context.Response.Write(callback + "(" + jss.Serialize(new { meunList = MeunsList(), webSite = WebSite() }) + ")");
        context.Response.End();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

 

随着 html5 的流行,如今已经今非昔比,跨域问题已经不是前几年那种概念了。如果你只是看了3年前的文章,里边的所谓“跨域,jsonp调用”之类的描述,基本上都可以扔掉了。

例如,你可以让你的ashx告诉浏览器对于跨域访问不要拦截返回值,允许客户端获得响应:

C# code?

1

context.Response.AddHeader("Access-Control-Allow-Origin""*");


同时你的客户端要声明cors,例如对于jQuery for ajax,就是在第一行代码声明一次:

JavaScript code?

1

jQuery.support.cors = true;

有关 cors  的说明文章有些是很繁琐、依赖其它系统的。实际上你在 ashx 中精确地写上一行代码来允许跨域就行了,先不要用其它的办法。

假设ashx 只是用于普通的页面 http GET、POST 下载访问,也就是普通的网页请求,那么你无须考虑跨域问题。因为这类访问 ashx 地方法,即使是跨域,浏览器也是允许的

你可能感兴趣的:(asp.net ashx 跨域问题)