jQuery提供的getJSON方法在进行跨域调用时,只需要在调用地址后面加上参数jsoncallback=?即可。
客户端调用代码:
$.getJSON( "http://www.XXXX.com/getJSON.jsp?jsoncallback=?", {A:1, B:2, rand:Math.random()}, function(data){ alert(data); } );
其中A、B是需要传递的其它参数,而rand参数则是防止调用缓存而增加的随机数参数。
如果你认为这样就搞定了,那可就错了。因为jsoncallback=?中的问号会被Query自动替换成其他的回调方法的名称,服务器先接受参数jsoncallback,然后把jsoncallback的值作为JSON数据方法名称返回。
服务器端代码(getJSON.jsp):
String A_val = request.getParameter("A");
String B_val = request.getParameter("B");
String jsoncallback = request.getParameter("jsoncallback");
if(jsoncallback != null){
out.print(jsoncallback+"(");
}
%>
{"A":A_val,"B":B_val,"C":3}
<%
if(jsoncallback != null){
out.print(")");
}
%>
现在再访问getJSON.jsp应该返回:?({"A":1,"B":2,"C":3}) 这样客户端就可以正确处理此次getJSON请求了