|  
 
 
<%@ WebHandler Language="C#" Class="Test" %> using System; using System.Web;
public class Test : IHttpHandler {          public void ProcessRequest (HttpContext context) {         context.Response.Charset = "utf-8";         context.Response.ContentType = "text/javascript";         string callback = context.Request.QueryString["callback"];//回调函数名         string json = "{'name':'Ray','msg':'hello world!'}";//JSON格式的字符串         string result = string.Format("{0}({1})", callback, json);         context.Response.Write(result);         context.Response.Flush();         context.Response.End();     }       public bool IsReusable {         get {             return false;         }     } } 
复制代码 
用jQuery的话,URL中就不用加回调函数名了,元宵祝福网页 因为jQuery已经为你代劳了,而这个回调函数就是success。 复制代码 
$.ajax({     url: "http://172.20.2.60:8088/newwebsite/MyHandler.ashx"     , dataType: "jsonp"     , success: function(data) {         //TODO     } }); 
复制代码 
JSONP很强大,但是也有两个让人蛋疼的地方,首先是安全性问题。 
不管怎么说你都是从别人的地盘倒腾数据,而且内容还是脚本!也就是说如果人家是个坏人,给你点恶意代码,那就不好办了。 
当然这个问题一般也不会发生。毕竟咱想请求数据的地方都是咱熟悉的要么就是官方的(什么谷歌地图API,新浪微博API这些显然不会给你坑)。 
另一个问题就闹心了。浏览器端对JSONP的请求是否失败是无法直接知晓的。就算用jQuery,error也不起作用。就算出错了try,catch也捕捉不到。 
所以暂时知道的只有一种不完美方法,就是设定一个时限,如果超过时限还没有数据返回,那么就判定error。说不完美是因为,各家的网速是不同的,所以...你懂得。 上一页  [1] [2]  
 |