回 帖 发 新 帖 刷新版面

主题:[原创]解决跨域post提交表单、Ajax跨域、无刷新(Asp.net,IE8为例)

现在www.a.com有luck.html 这个页面要获取 www.b.com 某些数据, 可以通过JS 的src 属性获得

 

1、获取数据

在luck.html 页面的body 标签之间写入

 

   <script charset="utf-8" id="cmscript" src="http://www.b.com/super.js" ></script>    

charset 这个是编码 根据个人需要修改.

super.js 是b.com下自己需知道的相关数据提取途径的JS文件, 因为JavaScript的src属性是不存在跨域的,所以用他来跨域获取数据是非常方便的。

这样就可以获取b.com 的数据了,当然这两个域名页面如何传参,用什么文件你是要知道的。(都是你开发的差不多吧)

 

获取数据是比较简单的,但是提交数据呢?

 

2、提交数据

 

2.1 Ajax 跨域提交

假设super.js 这个文件返回给luck.html 页面的是评论框,像我们在博客里,论坛里,对文章的可以评论的那个输入内容及发表评论的按钮。

 

有2个非常简单的jQuery方法,也是我在网上我搜的结果出现最多的。jQuery.getScript() JQuery.getJSON() 

这两个都可以跨域只是返回的数据格式不一样。

 

以下例子

super.js

   jQuery.getScript("http://www.b.com/super.aspx?评论内容='aaaa'", function () {
           alert(json.msg);
   });
  json.msg 是哪里来的呢? 

 

 

 

super.aspx 

  protected void Page_Load(object sender, EventArgs e)
   {
        Response.Write("var json = {msg:'" + rmsg +"'}");
        Response.End();
   }

json.msg 就是处理页面输出的.

 这样就可以返回你想要的数据了.当然这里我是以aspx为处理文件 你可以改ashx为处理文件。

 getScript 也是可以返回JSON格式的..(不了解Json格式上网找找哦)

 getJSON 也是一样的.

或者你不想返回JSON 只需返回一个值

在super.js 下 定义一个变量 如 var temp;

在super.aspx 

 Response.Write("var temp=5");
 Response.End();

就可以了。

 

http://www.b.com/super.aspx?评论内容='aaaa'

这个是提交数据的url。

现在了解到的是完全可以跨域从将a.com 的数据提交到b.com并且返回数据的。

问题是url的长度是有限制的,

假设

评论内容='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 

 

甚至更多,服务器就收不到了。

因为getScript  getJSON 是以get 方式提交的,get是有限制的。

2.2 post提交表单

2.1中的情况可以满足几百字节数据的跨域提交但是超过就不行了。

所以现在需要用post提交。

 

开始也跟大家说了 super.js是返回评论输入框和发表按钮。所以在写代码当然是在super.js下修改如何提交的代码。

主要就是发表按钮的onclick事情。

    document.getElementById("formtextarea").value = encodeURI(o_txt);
    document.getElementById("form1").action ="请求地址";
    document.getElementById("form1").submit();
    jQuery.getScript("请求地址", function () {
                  if(json.msg=='ok')
                  {
                               //do something
                               window.location.href.reload;          //后面讲解

                  }   
    });

 

当submit之后 你的post数据已经发到处理页面(super.aspx),将post的数据是否成功的代码 1成功 2 失败 存进session

注意: post 后是获取不了返回的数据的。有另外一种方式比较麻烦而且不实用我就不多说了。

所以在次跨域请求,这次请求是判断刚session的数据是1或者2,获取返回数据输出就可以了。

 



form1 是在super.js 输出给luck.html 页面的form . 这里有个重点,表单form提交之后会进行跳转刷新,如果你不想刷新。

在这里你必须在super.js 输出的时候定义一个隐藏的iframe 将form 的target 属性指向你定义的iframe

<iframe name="framesubmit" id="framesubmit"  style="display:none" width="1" height="1" ></iframe>

<form method="post"  target="framesubmit" name="form1" id="form1" style="display:none"></form>

 

 

最后会发现虽然可以 但是每次都会弹出一个提示框 告诉你 ,如果要提交的话比较按确定刷新之类的提示。

因为是postback的问题,你也没有刷新,必须刷新ie才知道你提交过。

所以window.location.href.reload; 这句话就是解决这个问题。。

 

完毕..

当然针对不同浏览器大家都需要注意的..

回复列表 (共1个回复)

沙发

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料 http://user.qzone.qq.com/909065437/infocenter
网商咨询 摩客天宇QQ 909065437 

我来回复

您尚未登录,请登录后再回复。点此登录或注册