原文地址:***/UIweb/jquery_ajax_kuayujiejue.html

最近开发中,设计到智能手机项目,给领导做几个demo。主要是用jquery和jqeury mobile。

越来越发现jq jqm是太强大了。由衷的佩服开发和维护团队。哈哈
 
在开发中,设计多个平台,其中我负责的管理中心,需要提供接口给网站B进行验证和返回一堆html代码。
为了尽量减少网站B的开发工作量,我想到了类似百度广告联盟、搜狗联盟的引用js代码的方式。
说干就干。
 
先学习一下搜狗联盟的做法:
<script type="text/javascript">
var sogou_ad_id=209344;
var sogou_ad_height=90;
var sogou_ad_width=728;
</script>
<script language='JavaScript' type='text/javascript' src='http://images.sohu.com/cs/jsfile/js/c.js'></script>
 
我们可以看到,明显2块代码:
1.是全局变量,是确认网站的广告编号、配置宽高。
2.广告逻辑代码
 
按照这个思路,我需要提供一个外链的js文件,而对于需要配置的参数,可以通过定义全局变量来实现(后来我自己做了参数分析,就不用全局变量了)。
 
小小的js文件背后,隐藏着很深的逻辑。
思路:
1.接收到调用方的参数数据,调用我的js函数处理((document).ready加载后默认处理);
2.(document).ready函数调用后台逻辑代码。我后台是aspx的,所以做了一个Apsx页面处理这个请求。
这里有个问题,让我走了弯路。
js是不能跨域访问的,历史原因就悠久。
 
 

什么是跨域

JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。

 
实现:
如果碰到什么问题,我们都会google一下(这里说一下,搜索技术问题,google最强的了,baidu就是浮云了)。然后找代码,下代码,
博主不提供下载还得骂娘。唉,天下没有免费的午餐,已经共享知识了,不要强求了。
 
jquery实现ajax访问很多方式,同时也支持post和get,但是只有get方式才能实现跨域访问。
 
Post方式代码:
 
       $.ajax({
          //要用post方式     com_id=135
           type: "Post",
          //方法所在页面和方法名    
           url: "http://localhost:3101/Image.aspx?id=" +s_id,
           contentType: "application/json; charset=utf-8" ,
           dataType: "json",
           data: "{s_id:'"+s_id+"'}" ,       //这里是要传递的参数,格式为 data: "{paraName:paraValue}",下面将会看到    
           success: function (data) {
              //返回的数据用data.d获取内容    
              var adas = data.d;
               $( "#divShowtwo").html(adas );
           },
           error: function (err) {
               alert(err.toString);
           }
       });
 实现get方式 $.ajax函数也可以,jquery封装的 $.getJSON函数更简单一些。
  var AjaxUrl = "http://localhost:3101/Image.aspx?id=" +s_id+"&jsoncallback=?";
           $.getJSON(AjaxUrl, function (Json) {
               $( "#divShowtwo").html(Json.html);
             });

jQuery.getJSON( url, [data], [callback] ) 跨域加载JSON数据。

  • url: 发送请求的地址

  • data : (可选) 待发送key/value参数

  • callback: (可选) 载入成功时的回调函数

支持的时间和$.ajax是一样的。
注意:jsoncallback=?为必须参数,其它参数可以正常URL传参方式使用。例如 ?ID=23&Name=test&
 
后台代码:
Image.aspx页面要实现resposne一段json。
string jsoncallback = Request.QueryString[ "jsoncallback"];    
         Response.ContentEncoding = Encoding.UTF8;
         Response.ContentType = "application/json";  
        HttpContext.Current.Response.ContentType = "text/json" ;
      string rehtml = "" ;
      try
       {
          StringBuilder sb = new StringBuilder();
          if (id.Length > 0)
           {                
                  string imgurl = GetPicURL(model.QRcodeURL);
                   sb.Append( "<p>www.360yi.net</p>" );
                  rehtml = Cleaner(sb.ToString());
           }
       }
      catch (Exception ex)
       {
           rehtml = "";
       }
       Response.Write(jsoncallback + "({\"html\":\"" + rehtml + "\"})");
       Response.End();
 
注意:
服务端接口页面
1、string jsoncallback = Request.QueryString["jsoncallback"]; 这个为必须获取的参数
2、输出是必须jsoncallback +输出JSON串
 
Json传递html的处理:
json对<> / \ 等关键字是需要转义的。这里大家都看到一个函数Cleaner()。就是实现json html转义的。
 
    /// <summary>
  /// json html字符串转义
  /// </summary>
  /// <param name="_s"></param>
  /// <returns></returns>
  public static string Cleaner( string _s)
   {
      if (_s == null ) return "";
       System.Text. StringBuilder sb = new System.Text.StringBuilder(_s);
       sb.Replace( @"\", @"\\" );
       sb.Replace( @"'", @"\'" );
       sb.Replace( @"""", @"\""" );
       sb.Replace( Environment.NewLine, @"\n" );   //替换连在一起的\r\n
       sb.Replace( "\n", @"\n" );               //单个替换
       sb.Replace( "\r", @"\n" );
      return sb.ToString();
   }
 
另外,C# json解析类,大家可以看看:

(转)jquery ajax使用及跨域访问解决办法的更多相关文章

  1. Ajax跨域访问解决办法

    方法1. jsonp实现ajax跨域访问示例 jsp代码: <body> <input type="button" onclick="testJsonp ...

  2. ASP.net Web API允许跨域访问解决办法

    来源 http://blog.csdn.net/wxg_kingwolfmsncn/article/details/48545099 遇到此跨域访问问题,解决办法如下:   方法一:   1. 在we ...

  3. AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?

      AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法? 分类: web前端面试题2013-07-20 22:40 630人阅读 评论(0) 收藏 举报 目录(? ...

  4. jQuery发送ajax请求实现跨域访问

    Java代码的话,在返回响应之前调用如下代码中的allowCrossDomainAccess()方法: /** * 允许跨域访问 */ public void allowCrossDomainAcce ...

  5. jQuery ajax的jsonp跨域请求

    一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...

  6. AJax与Jsonp跨域访问

    一.JavaScript的AJax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML) 设计AJax使用的一种重要技术 ...

  7. java 设置允许ajax XMLHttpRequest 请求跨域访问

    怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域. 方案1: 使用XMLHttpRequest...  异步请求不能跨域访问,除非要访问的网页响应头信息设置为允许跨域访问. 将网页设置为允许 ...

  8. 基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特 ...

  9. [Unity WWW] 跨域访问解决方法

    什么是跨域访问 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation).信任关系是连接在域与域之间的桥梁.当一个域与其他域建立了信任 ...

随机推荐

  1. Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).

    Kernel Principal Components Analysis PCA实际上就是对原坐标进行正交变换,使得变换后的坐标之间相互无关,并且尽可能保留多的信息.但PCA所做的是线性变换,对于某些 ...

  2. bash中的数值运算

    第一种,使用((表达式)): a=3 ((b=a+2)) echo $b 第二种使用let: let "c=$a+4" echo $c 第三种,使用expr表达式(注意空格不能少) ...

  3. Undefined property: Illuminate\Database\Eloquent\Builder

    是因为在 $activity=Activity::where('center_id','=',$center->id)->where('Date','=',date("Y-m-d ...

  4. 基于Qt的开源音乐播放器(CZPlayer)

    CZPlayer CZPlayer是基于Qt开发的一款功能强大的音乐播放器,该播放器的论坛地址请点击here,目前CZPlayer已经是第四个版本了,历史版本也分别在我的github上, github ...

  5. selenium python 第一个脚本

    为什么选择python?我的回答很简单,简单易学,功能强大! 下面看看python和selenium 2的结合是什么样子吧 一.第一个selenium python脚本: #coding = utf- ...

  6. UITableView优化技巧

    UITableView的简单认识 UITableView最核心的思想就是UITableViewCell的重用机制.简单的理解就是:UITableView只会创建一屏幕(或一屏幕多一点)的UITable ...

  7. ASP.NET MVC and jqGrid 学习笔记 3-如何从数据库获得数据

    实际应用中,大部分都是从数据库里获得数据,所以先建立一个数据库,Database first 或者Code first都可以,这里用Code first. 一.Model public class M ...

  8. 【Android Studio 小技巧】一键查看文件方法结构目录File Structure

    看源代码的时候,如果可以查看class中的所有方法,可以提高效率.Android Studio 中可以使用快捷键一键显示所有方法的目录. Mac: command + fn + F12 (在mac中的 ...

  9. 在Flex4中使用RemoteObjectAMF0来连接fluorine网关 转

    转http://vipnews.csdn.net/newscontent.aspx?pointid=2011_04_21_142132661 RemoteObjectAMF0是一个开源组件,可以很方便 ...

  10. 使用Mat分析大堆信息

    在定位一线问题时经常碰测试中出现Out Of Memory的问题, 通过jmap查看,发现JVM heap全用满了.有很多工具可以查看JVM堆的信息, 收费的比如JProfiler, YourKit, ...