日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

表单跨域提交

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 表单跨域提交 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

利用form表單跨域post

? ? ? 現在ajax應用這么廣泛,一般的應用都是直接通過異步調用就可以了,但是有些東西必須要使用post,而且是跨域的時候,ajax異步調用的方式就無能為力了。當然現在也有很多種辦法,比如通過flash中轉去post,可以post到任何域中,或者是通過嵌入iframe來實現,flash的方式雖然好,但是用戶還得下載個swf文件,而且as開發我也就略知皮毛,所以這里我就是要使用嵌入iframe的方式來實現。

? ? ? 我的需求是將部分內容post到server中,因為服務器是c++寫的cgi,所以沒辦法通過代理頁的方式來實現,只好在本頁面來實現。


?

在這里,我通過將需要post的內容寫入content的input中,然后點擊提交,將form的action設置為目標服務器的url,target設置為iframe的名稱,這樣就可以實現無刷新的跨域post了,但是由于瀏覽器防止重復提交的功能,所以如果直接提交到iframe的話,后面你刷新頁面的話,瀏覽器就會提示是否要重復提交,所以這里我們監聽iframe的onload事件,當iframe成功load之后,就將iframe的src指向空白頁,從而瀏覽器認為已經跳轉到新頁面了,刷新也就不會提示重復提交的彈出框了。
這里我們還可以在iframe?load成功的時候,通過contenWindow屬性來獲取服務器的響應,從而可以判斷post是否成功。因為這里要先判斷post是否成功,所以在取得了服務器返回的數據之后再設置iframe的src為空白頁面,并且將iframe的onload事件取消,否則iframe每次src設置為about:blank都會觸發onload事件。

?

這里看到有人說ie6中會有iframe的onload事件調用時頁面仍未載入完成,或是不觸發onload事件,則需要通過監聽iframe的readyState來實現得到服務器響應完成的功能。我貌似還沒碰到,等碰到了的話再來解決。最近做的東西還要改as代碼,恩,可以學學as了

?

<html> <head> <title>ddd</title> </head> <body> <script type="text/javascript"> function check() {var btn = document.getElementById("test_submit");var frm = document.forms["test_form"];var ifm = document.getElementById("test_iframe");frm.action = "http://xxx.xxx.xxx/post.php";frm.target = "test_iframe";frm.submit();btn.disabled = "disabled";ifm.onload = function(){btn.disabled = "";var str = ifm.contentWindow;alert(str.document.body.innerHTML);ifm.src = "about:blank"; ifm.onload = null; } return false; }</script> <form id="test_form" name="test_form" ><input type="hidden" name="content" value="xxx" /><input type="submit" name="test_submit" id="test_submit" /> </form> <iframe id="test_iframe" name="test_iframe" width="1" height="1" style="display:none"></iframe> </body> </html>

?

好吧,果然在ie下iframe不會觸發onload事件,于是改為了?Nicholas C.Zakas提供的方法,通過attachEvent來添加onload事件。

ifm.onload = function(){ btn.disabled = ""; var str = ifm.contentWindow; alert(str.document.body.innerHTML); ifm.src = "about:blank"; ifm.onload = null; }//改為if(ifm.attachEvent){ifm.attachEvent("onload", function(){ btn.disabled = ""; var str = ifm.contentWindow; alert(str.document.body.innerHTML); ifm.src = "about:blank"; ifm.detachEvent("onload", arguments.callee); }}else{ifm.onload = function(){ btn.disabled = ""; var str = ifm.contentWindow; alert(str.document.body.innerHTML); ifm.src = "about:blank"; ifm.onload = null; }}

總結

以上是生活随笔為你收集整理的表单跨域提交的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。