
html页面端示例代码:
复制代码代码如下:
//首先要引入jquery的js包
jQuery(document).ready(function(){
$.ajax({
type : "get", //jquey是不支持post方式跨域的
async:false,
url : "http://api.taobao.com/apitools/ajax_props.do", //跨域请求的URL
dataType : "jsonp",
//传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonp: "jsoncallback",
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
jsonpCallback:"success_jsonpCallback",
//成功获取跨域服务器上的json数据后,会动态执行这个callback函数
success : function(json){
alert(json)
}
})
})
服务器端示例代码,以java为例:
服务器端代码,是重点,开始以为,只要客户端通过jsonp就可以直接跨域访问,其实不然,需要服务器端的支持才行。
复制代码代码如下:
public void jsonpTest() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest()
HttpServletResponse response = ServletActionContext.getResponse()
//根据html指定的jsonp回调函数的参数名,获取回调函数的名称
//callbackName的值其实就是:success_jsonpCallback
String callbackName = (String)request.getAttribute("jsoncallback")
//简单模拟一个json字符串,实际可使用google的gson进行转换,次数通过字符串拼接
//{"name":"张三","age":28}
//\是对"号进行转义
String jsonStr = "{\"name\":\"张三\",\"age\":28}"
//最终返回的数据为:success_jsonpCallback({"name":"张三","age":28})
String renderStr = callbackName+"("+jsonStr+")"
response.setContentType("text/plaincharset=UTF-8")
response.getWriter().write(renderStr)
}
在使用Jquery跨域获取JSON时出现一个非常奇怪的问题,一直解决不了:1.首先用getJSON跨域获取JSON数据,回调函数执行也正常2.然后把JSON中的某个以空格分隔的数据变成数组3.对该数组执行循环,在循环中,用getJSON再跨域获取另一个JSON,然后执行一些动作以上执行到第三步时,在跨域获取另一个JSON处卡壳了,断点跟踪发现,此处回调函数不执行,一直执行到最后一次循环时,这个回调函数才执行,而且会执行多次,执行次数为循环次数,而且是把之前每次循环时传给他的值依次执行。也就是说,本应该是循环一次,执行一次getJSON,结果变成了循环结束,然后getJSON才用之前每次循环传给的值循环执行欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)