因为JQuery跨域访问是一个很头疼的问题,后来想用弹出窗口,关闭窗口的时候刷新父页面这个方法实现,同样遇到跨域刷新父页面报权限错误。
也许会有人问,为什么要跨域?因为我需要在一个ASP模块中的一个页面新增一个链接,点击链接的时候调用SOA接口并返回操作结果,刷新当前页面。但是这个模块是ASP的,我实在不想再增加ASP中的功能,所以打算用C#代码调用SOA,然后用Ajax调用C#程序得到操作结果,但是悲剧的是跨域调用的问题出现了,两个应用程序不在一个域名下面,公司有一堆扯淡的规范,这个我们必须遵守,最后我甚至想用ASP调用SOA返回结果(尽管非常不想这样做),抱着一点点希望开始百度JQuery跨域的问题,结果百度相当不靠谱,因为很多人都是看到别人的答案也不管正确不正确,直接转载,在这里要狠狠的鄙视这些不负责任的作者。无奈之下研究jsonp数据格式,最终成功了,现在分享一下,供以后有跨域异步调用的同学参考,代码如下:
怎么算是跨域:
1:域名不一致
2:域名一直,端口不一致
3:一个程序用域名,一个程序用IP
4:以后再补充
客户端
<script src="../../../js/jquery-1.6.1-min.js" type="text/javascript"></script>
<script type="text/javascript">
function ProcessOrder(orderid) {
var url = "Http://www.a.com"; //需要访问的域名
url += "/virtualPath/controller/action?orderid="+orderid;//拼接请求地址
$.ajax({
async:false,
url: url,
type: "GET",//跨域调用只能Get,Post方式好像不支持
dataType: 'jsonp',
jsonp: 'jsoncallback',//在请求服务器的时候,会加如下代码做回调标记类似jsoncallback=jQuery161036946019218396114_1365501709391&_=1365502154867
data: null,//因为我的参数拼接在URL中了,所以这个就是Null了
timeout: 5000,
success: function (data) {
alert(data);
location.reload();
},
error: function(er){
alert("请求出错(请检查网络.)");
}
});
}
</script>
服务器端的代码片段:
/// <summary>
/// 订单数据计算
/// </summary>
/// <returns>操作结果</returns>
public void ProcessOrder()
{
string resultString = string.Empty;
string jsonFlag = Request.QueryString["jsoncallback"];
//这个参数是要原样返回的,其实就是客户端回调方法标识,客户端代码中的:jsonp: 'jsoncallback',就是这个参数
try
{
int orderid = default(int);
string eid = Request.QueryString["eid"];
int result = -8;
if (int.TryParse(Request.QueryString["orderID"], out orderid))
{
result = ModifyOrder.ProcessOrder(orderid, eid);
}
switch (result)
{
case -9:
resultString="数据查询失败";
break;
case -8:
resultString="参数错误";
break;
case 0:
resultString="操作成功";
break;
default:
resultString="未知错误";
break;
}
}
catch (Exception ex)
{
resultString="系统异常!";
}
Response.Write(jsonFlag + "('" + resultString + "')");
//因为我是返回一个string字符串,所以可以这么写,如果要返回json格式的话,需要把resultString改为要返回的Json数据格式即可
}
代码就这么多了,希望对大家有用,也是为了自己以后方便使用。