同一段逻辑代码需要在多个网站中使用, 每个网站都新建一个ashx真是扯蛋的作法, 所以想只请求一处的ashx, 这样便于维护和修改, 那么,ajax跨域问题就来了。
废话少说, 直接上代码, 我现在做的是GET请求的。 POST请求同理。
首先整改ashx,加入支持跨域请求的代码。
context.Response.ContentType = "text/plain"; string active = context.Request.QueryString["active"]; string rs = "0"; if (active == "3") { string oid = TGM.BaseOpera.String.replacesql(context.Request.QueryString["oid"]); if (!string.IsNullOrEmpty(oid)) { tansar.BLL.order tbo = new tansar.BLL.order(); string flag = tbo.GetSID(oid); if (flag != "1000") rs = "ok"; } } #region 支持跨域请求 context.Response.ClearHeaders(); string origin = context.Request.Headers["Origin"]; context.Response.AppendHeader("Access-Control-Allow-Origin",string.IsNullOrEmpty(origin) ? "*" : origin); string requestHeaders = context.Request.Headers["Access-Control-Request-Headers"]; context.Response.AppendHeader("Access-Control-Allow-Headers",string.IsNullOrEmpty(requestHeaders) ? "*" : requestHeaders); context.Response.AppendHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); #endregion context.Response.Write(rs);
然后ajax中的js方法:
function getFlag(d) { $.ajax({ type: "get", async: false, url: "http://www.8kmm.com",
data: d,
dataType: "text",
success: function (data) {
if (data == "ok") {
location.href = "/user/orderdetail.aspx?oid=<%=Onumber %>"; }
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("请求数据异常:" + errorThrown);
}
});
}
做前端开发, 浏览器的开发者工具能帮大忙, 比如webkit内核的, ff的。