码迷,mamicode.com
首页 > 其他好文 > 详细

跨域提交

时间:2015-04-29 16:44:00      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

本文实现常用的跨域提交,并非ajax提交;

一、HTML表单:

<form id="fm" name="FM" action="server.aspx" method="post" target="ajaxiframe">
    <input type="text" name="tit" value="标题" />
    <input type="submit" value="提交" />
</form>

 提交表单之后,数据传输如下:

技术分享

 

二、只是提交还不能满足我们的需求,还必须有服务端的返回值;

这里用setInterval定时取值:

HTML表单:

<form id="fm" name="FM" action="server.aspx" method="post" target="ajaxiframe">
    <input type="text" name="tit" value="标题" />
    <input type="submit" value="提交" />
</form>
<iframe id="ajaxiframe" name="ajaxiframe" width="0" height="0"></iframe>

 JS Code

<script type="text/javascript">
    (function (iframe) {
        var Timer = setInterval(function () {
            if (iframe.contentWindow) {
                clearInterval(Timer);
                //绑定事件
                if (iframe.attachEvent) {
                    //IE
                    iframe.attachEvent(‘onload‘, function () {
                        var result = iframe.contentWindow.document.documentElement.innerText;
                        if (result.length>0) {
                            alert(‘提交成功!(‘ + result + ‘)‘);
                        }
                    });
                } else {
                    iframe.addEventListener(‘load‘, function () {
                        var result = iframe.contentWindow.document.documentElement.textContent;
                        if (result.length > 0) {
                            alert(‘提交成功!(‘ + result + ‘)‘);
                        }
                    })
                }
                //解除事件
                if (iframe.detachEvent) {
                    iframe.detachEvent(‘onload‘, function () { });
                } else {
                    iframe.removeEventListener(‘load‘, function () { }, true);
                }

            }
        }, 0);
    })(document.getElementById(‘ajaxiframe‘));
</script>

 

三、结合以上方式,现在来拓展javascript实现;

<form id="fm" name="FM" action="server.aspx" method="post">
    <input type="text" name="tit" value="标题" />
    <input type="button" value="button" onclick="send(FM);" />
    提交结果:<span id="result"></span>
</form>

 JS CODE 公共方法:

<script type="text/javascript">
    function XMLhttp() {
        this.request = null;
        this.post = null;

        //iframe set
        var div = document.createElement(‘div‘);
        div.innerHTML = ‘<iframe id="ajaxiframe" name="ajaxiframe" width="0" height="0"></iframe>‘;
        div.style.display = ‘none‘;
        document.body.appendChild(div);
        var iframe = div.firstChild;
        //post set
        this.post = function (fm, url, callback) {
            if (typeof url == ‘function‘) {
                callback = url;
            }
            if (typeof fm == ‘string‘) {
            //字符串提交,实例:ajax.send(‘a=1&b=2‘,‘/server.aspx‘, function (data) {});
                var f = document.createElement(‘form‘); //
                f.name = ‘ajaxform‘;
                f.target = ‘ajaxiframe‘;
                f.method = ‘post‘;
                f.action = url;
                var ds = fm.split("&");
                for (var i = 0; i < ds.length; i++) {
                    if (ds[i]) {
                        var v = ds[i];
                        var el = document.createElement(‘input‘);
                        el.type = ‘hidden‘;
                        el.name = v.substr(0, v.indexOf(‘=‘));
                        el.value = v.substr(v.indexOf(‘=‘) + 1);
                        f.appendChild(el);
                    }
                }
                document.body.appendChild(f);
                f.submit();
                document.body.removeChild(f);
            } else if (typeof fm == ‘object‘) {     
            //表单提交,实例:ajax.send(document.getElementById(‘fm‘),‘/server.aspx‘, function (data) {});
                fm.target = ‘ajaxiframe‘;
                if (typeof url == ‘string‘) {
                    fm.setAttribute(‘action‘, url);
                }
                fm.submit();
                if (iframe.contentWindow) {
                    //绑定事件
                    if (iframe.attachEvent) {
                        //IE
                        iframe.attachEvent(‘onload‘, function () {
                            this.result = iframe.contentWindow.document.documentElement.innerText;
                            if (typeof callback == "function") {
                                callback(this.result);
                            }

                        });
                    } else {
                        iframe.addEventListener(‘load‘, function () {
                            this.result = iframe.contentWindow.document.documentElement.textContent;
                            if (typeof callback == "function") {
                                callback(this.result);
                            }
                        })
                    }
                    //解除事件
                    if (iframe.detachEvent) {
                        iframe.detachEvent(‘onload‘, function () { });
                    } else {
                        iframe.removeEventListener(‘load‘, function () { }, true);
                    }
                }
            }
        }
    }
    XMLhttp.prototype = {
        send: function (fm, url, callback) {
            ajax.post(fm, url, callback);
        }
    }
    var ajax = new XMLhttp();
    function send(s) {
        ajax.send(document.getElementById(‘fm‘), function (data) {
            document.getElementById("result").innerHTML = data;
        });
        ajax.send(‘tit=string tit‘,‘/server.aspx‘, function (data) {});
    } 
</script>

 

跨域提交

标签:

原文地址:http://www.cnblogs.com/sntetwt/p/4465975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!