日期:2014-05-16  浏览次数:20366 次

跨域请求之JSONP 五

前面四篇与后台约定的是返回如下的结构

?

?

jsonp = "{name:xx, age:xx}"

?

即标示符jsonp为一个全局变量。这篇后台接口则是一个JSON作为函数的参数传入,即后台返回的是一个全局函数。

?

后台我用Java写的Servlet,如下

?

String callback = request.getParameter("callback");
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.println(callback + "({age: 877})");
out.flush();
out.close();

?

callback是前台传给后台的参数,即全局的一个函数名。?这种方式也是jQuery采用的方式。jQuery的JSONP请求每次都会生成一个随机函数名传给后台。

?

接口与上一篇相同,如下

?

// 开启调试模式
Sjax.debug = true;
 
Sjax.get({
	url	      // 请求url 
	param	  // 请求参数 (键值对字符串或js对象)
	success   // 请求成功回调函数
	failure   // 请求失败回调函数
	scope	  // 回调函数执行上下文
	timestamp // 是否加时间戳
});

?

这种方式的缺点是每次请求都会生成一个全局函数名,回调后虽然将函数置null/undefined,但window对象下仍然能看见该属性。前四篇则固定使用变量jsonp,不会每次请求都随机生成一个全局函数。