今天耗費大約1天時間折騰異步提交,剛開始沒有意識到是跨域訪問造成的,后來跟蹤了代碼,發(fā)現(xiàn)請求根本沒有發(fā)出去,debug發(fā)現(xiàn)是權限錯誤,才意識到跨域訪問數(shù)據(jù)了。 因為JQuery跨域訪問是一個很頭疼的問題,后來想用彈出窗口,關閉窗口的時候刷新父頁面這個方法實現(xiàn),同樣遇到跨域刷新父頁面報權限錯誤。
也 許會有人問,為什么要跨域?因為我需要在一個ASP模塊中的一個頁面新增一個鏈接,點擊鏈接的時候調(diào)用SOA接口并返回操作結果,刷新當前頁面。但是這個 模塊是ASP的,我實在不想再增加ASP中的功能,所以打算用C#代碼調(diào)用SOA,然后用Ajax調(diào)用C#程序得到操作結果,但是悲劇的是跨域調(diào)用的問題 出現(xiàn)了,兩個應用程序不在一個域名下面,公司有一堆扯淡的規(guī)范,這個我們必須遵守,最后我甚至想用ASP調(diào)用SOA返回結果(盡管非常不想這樣做),抱著 一點點希望開始百度JQuery跨域的問題,結果百度相當不靠譜,因為很多人都是看到別人的答案也不管正確不正確,直接轉載,在這里要狠狠的鄙視這些不負 責任的作者。無奈之下研究jsonp數(shù)據(jù)格式,最終成功了,現(xiàn)在分享一下,供以后有跨域異步調(diào)用的同學參考,代碼如下:
怎么算是跨域:
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",//跨域調(diào)用只能Get,Post方式好像不支持 dataType: 'jsonp', jsonp: 'jsoncallback', data: null,//因為我的參數(shù)拼接在URL中了,所以這個就是Null了 timeout: 5000, success: function (data) { alert(data); location.reload(); }, error: function(xhr){ alert("請求出錯(請檢查網(wǎng)絡狀況.)"); } }); } </script>
服務器端的代碼片段:
/// <summary> /// 訂單數(shù)據(jù)計算 /// </summary> /// <returns>操作結果</returns> public void ProcessOrder() { string resultString = string.Empty; string jsonFlag = Request.QueryString["jsoncallback"];//這個參數(shù)是要原樣返回的,其實就是客戶端回調(diào)方法標識,客戶端代碼中的:jsonp: 'jsoncallback',就是這個參數(shù) 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="參數(shù)錯誤"; break; case 0: resultString="操作成功"; break; default: resultString="未知錯誤"; break; } } catch (Exception ex) { resultString="系統(tǒng)異常!"; } Response.Write(jsonFlag + "('" + resultString + "')"); //因為我是返回一個string字符串,所以可以這么寫,如果要返回json格式的話,需要把resultString改為要返回的Json數(shù)據(jù)格式即可 }
代碼就這么多了,希望對大家有用,也是為了自己以后方便使用。
聯(lián)系客服