分享

JQuery.Ajax跨域访问数据方法

 taohongyong 2014-09-24

今天耗费大约1天时间折腾异步提交,刚开始没有意识到是跨域访问造成的,后来跟踪了代码,发现请求根本没有发出去,debug发现是权限错误,才意识到跨域访问数据了。 因为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 ProcessFlightAgency(orderid) {
                           var url = "Http://www.a.com"; //需要访问的域名                         
                              
                            url += "/virtualPath/controller/action?eid=yujh&orderid="+orderid;//拼接请求地址
                            
                           $.ajax({
                                            async:false,
                                            url: url,
                                            type: "GET",//跨域调用只能Get,Post方式好像不支持
                                            dataType: 'jsonp',
                                            jsonp: 'jsoncallback',
                                            data: null,//因为我的参数拼接在URL中了,所以这个就是Null了
                                            timeout: 5000,
                                            success: function (data) {
                                            alert(data); 
                                            location.reload();
                                            },
                                            error: function(xhr){
                                            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数据格式即可
 }

 

代码就这么多了,希望对大家有用,也是为了自己以后方便使用。

 


    
       

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多