jsonp跨域解决方案原理介绍:
正常情况下由于同源策略,前端js中A网站无法请求B网站数据,而html的script元素开放策略,A网站可以利用script元素从B网站获取可执行的js语句。在这种前提条件下,如果在A网站js中定义一个方法function funcCallback(data){},并且在B网站后台返回这个funCallback(data),那么A网站就可以通过加载script元素请求B网站,然后再通过funcCallback方法获取来自B网站的数据。
例子: A.html
B网站后台,如java:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("funCallback('hello');");}
从上面的例子中,可以使得A网站获取B网站的数据hello,注意后台输出的一定要是对应的js语句。
下面我们来说说,如何使用jsonp规范交互请求。
我们可以在A网站通过ajax去请求B网站的数据,一般数据以json格式传递。可以看一个例子。
A网站:
B网站后台,如java:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String jsonpcallback = request.getParameter("jsonpcallback"); response.getWriter().write(jsonpcallback + "{name: \"hello\"};");}
最后几个jsonp使用的注意点:
*只能发送get请求*只能异步请求*url前缀记得加上http://