<%@ 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]
|