跨域提交

本文实现常用的跨域提交,并非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>
时间: 2024-11-01 15:50:11

跨域提交的相关文章

使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便

[jQuery]$.get跨域提交不发送原因

使用 $.ajax({ url: "http://pastebin.com/embed_js.php?i=sy9gt3FR", dataType: "jsonp", success: function (data) { // ... } }); [jQuery]$.get跨域提交不发送原因,布布扣,bubuko.com

代替jquery $.post 跨域提交数据的N种形式

跨域的N种形式: 1.直接用jquery中$.getJSON进行跨域提交 优点:有返回值,可直接跨域: 缺点:数据量小: 提交方式:仅get (无$.postJSON) $.getJSON("http://www.sendnet.cn/?callback=?" , { UserId: 1001 }, function (data) { alert(data.info); }); $.ajax({ type: "Get", url: "http://www.

ServiceStack支持跨域提交

//ServiceStack对浏览器有一定的限制 //修改AppHost.cs文件 using Funq;using ServiceStack;using ServiceStackTest.ServiceInterface; namespace ServiceStackTest{ public class AppHost : AppHostBase { /// <summary> /// Default constructor. /// Base constructor requires a

jquery Ajax 通过jsonp的方式跨域提交表单

Jquery Ajax可以通过jsonp的方式跨域提交表单,至于什么是跨域提交简单说就是你的客户端和服务端不在同一个域名下或端口号不同也可以叫做跨域. 前台代码: $.ajax({ type : 'get', async: false, url : '${pageContext.request.contextPath}/clue/uploadForm', dataType : 'jsonp', data: { mydata : JSON.stringify(obj,fm), formId : f

C#使用jsonp进行跨域提交表单

跨域提交留言,并返回是否成功! C#服务端: public void FeedBackPost(string name, string email, string tel, string website, string desc, string thisIp, string sourse, string callBack) { try { Response.ContentType = "application/x-javascript"; string str = callBack;

妥善的ajax跨域提交post请求的解决方案,结合PHP与jquery

开发背景: 在开发中采用了一个新的架构,将大部分客户的留言功能集成到一个公共API提交保存,采用不同的用户名区分,供客户查询自己网站的留言,这样节约了客户网站的资源,也提升了维护性. 那么在提交时不能采用直接的post提交,否则会产生跳转,使访客混乱,所以采用ajax提交留言内容至公共服务器:http://wx.igooda.cn/index.php/messagesave,但尝试后发现不能提交post请求,百度后查询结果是跨域只能是get请求,这对留言内容多的来说,是不可行的.还有一种解决方案

[转载]解决flash与js交互、flash跨域交互、flash跨域提交

http://blog.csdn.net/andyxm/article/details/5219919 我们引用本地flash,实现flash与js双向交互. function thisMovie(movieName) {     if (window.document[movieName]){      return window.document[movieName];    }else if (navigator.appName.indexOf("Microsoft")==-1)

Extjs的form跨域提交文件时,无法获取返回结果

form文件表单跨域提交时,无法获取远程服务器的返回结果,form提交代码如下: form.submit({ url:'http://{remoteUrl}/hgisserver/wrds/file', waitMsg: 'Reading your file...', method : 'POST', success: function(fp, o) { console.log(o); }, failure: function(form, action) { console.log(action