`

JSONP请求简述

阅读更多

跨域请求-JSONP

原理:通过不受访问限制<script>标签发送请求。

下面做了一个例子,以供参考:

前端代码:

<script type="text/javascript">
    //测试jsonp
function handleResponse(data){
        Util.log(data);
    }
    var script = document.createElement("script");
    //script.src = "http://freegeoip.net/json/?jsonp=handleResponse";
script.src = "http://localhost:8080/CookieTest/json?callback=handleResponse";
    document.body.insertBefore(script,document.body.firstChild);
</script>

后台代码:

request.setCharacterEncoding("UTF-8");

JSONObject json = new JSONObject();

json.put("contentType", request.getContentType());

json.put("contentLength", request.getContentLength());

json.put("contextPath", request.getContextPath());

json.put("remoteAddr", request.getRemoteAddr());

PrintWriter out = response.getWriter();

String callback = request.getParameter("callback");

if(null == callback || "".equalsIgnoreCase(callback)){

    out.print(json);

}else{

    out.print(callback + "(" + json + ");");

}

out.flush();

out.close();

回调函数说明:

其实JSOP回调函数的原理通过上面的例子应该很容易理解,其实后台返回的不是一个json对象,而是将需要返回的json对象作为回调函数的参数进行返回。因为前端是使用<script>标签,加载到的数据会当作js来运行。到这里应该明白jsonp是如何请求数据以及回调函数的原理了吧!!!

注意:若服务器端接口直接返回json对象,则前端无法调用回调函数。

上述为个人理解,理解不到位的地方,望指正!!!

分享到:
评论

相关推荐

    详解JSON和JSONP劫持以及解决方法

    而攻击者可以利用这一特性,在自己的页面上发起恶意的JSONP请求,如果服务器端的接口支持JSONP响应,那么攻击者便可间接执行服务器返回的脚本,从而引发安全问题。例如: ```javascript function useUserInfo(v){ ...

    AJAX应用开发综合案例

    10. **安全性**:简述AJAX应用可能面临的安全问题,如XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等,并给出相应的防护措施。 总的来说,这个综合案例旨在帮助开发者全面理解AJAX技术,并具备使用AJAX构建高效、...

    Ajax与Atlas开发系列课程1,2

    6. **跨域问题**:介绍同源策略及其对Ajax请求的影响,以及如何通过JSONP或CORS解决跨域问题。 在“Ajax与Atlas开发系列课程(2):Ajax开发介绍”中,我们将进一步探讨Ajax的实际应用,特别是微软的Atlas框架,它是...

    Ajax与PHP基础教程.rar

    2. **AJAX库与框架**:简述jQuery和其他流行库(如Prototype、Dojo)如何简化Ajax开发。 3. **跨域问题与解决方案**:探讨Ajax的同源策略限制及JSONP、CORS等跨域解决方案。 ### 第五章 - PHP与Ajax结合 1. **创建...

    15天学会jQuery 15天学会jQuery

    - $.ajax()方法:理解异步请求的基本结构,学习设置参数进行GET和POST请求。 - JSONP和跨域:介绍JSONP的工作原理,解决跨域问题。 第六天:jQuery插件 - 插件使用:了解如何引入和使用第三方jQuery插件,如...

    Java工程师面试宝典

    - **Jsonp**:JSON with Padding,用于跨域数据请求。 ##### 四、Redis(缓存数据库) - **Redis**:一种基于内存的操作系统,可用于高速缓存和消息队列。 ##### 五、Quartz - **Quartz**:强大的作业调度框架。...

    javascript中文参考手册

    7. **AJAX和Fetch API**:介绍如何进行异步数据请求,包括XMLHttpRequest对象的使用和现代Fetch API的介绍。 8. **ES6及后续版本的新特性**:涵盖箭头函数、类、模板字符串、解构赋值、模块导入导出、Proxy、...

    Javascript 手册(CHM格式)(程序员必备)

    6. **AJAX和Fetch API**:用于实现页面的异步数据交换,了解请求和响应的处理方式。 7. **ES6及后续版本的新特性**:如箭头函数、模板字符串、解构赋值、类和模块系统(import/export)。 8. **错误处理**:学习...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 服务端循环链接请求来收发消息 05 补充 06 udp套接字 07 recv与recvfrom的区别及基于udp实现ntp服务 08 基于tcp实现远程执行命令 09 基于tcp实现远程执行命令测试结果 10 粘包现象 11 粘包解决方法 第31章 01 ...

    php main 与 iframe 相互通讯类(js+php同域/跨域)

    1. 使用JSONP(JSON with Padding)技术,通过动态创建script标签的方式发送请求。 2. 利用window.name的特性,在不同的域之间传递信息。 3. 使用HTML5的window.postMessage方法实现安全的跨域通讯。 4. 通过创建...

    阿里前端面试第三期.pdf

    - JSONP、CORS、代理服务器等。 25. instanceof的实现原理: - 判断一个对象是否是某个构造函数的实例。 26. React组件的生命周期: - 包括挂载、更新和卸载过程中的生命周期方法。 27. Flux思想: - 是一种...

    FE21-JS-DAY4-Renata-Richard

    11. **跨域通信**:理解同源策略及其限制,以及如何通过JSONP、CORS等方式进行跨域请求。 12. **Web存储**:如localStorage和sessionStorage,用于在浏览器中持久化数据。 13. **前端框架预览**:可能简述React、...

Global site tag (gtag.js) - Google Analytics