前几天,在2个系统中涉及到相互访问,并且返回处理结果。例如:项目A的一个servlet调用项目B的某一个servlet,在jQuery.ajax中不能直接通过json的方式访问。最终搜索了许久,终于发现通过jsonp的方式可以实现。现将处理过程记录下来,以做备忘。
首先,前段js代码实现:
<html> <head> <script type='text/javascript' src='jquery-1.8.3.js'></script> <script type='text/javascript'> $(function() { $.ajax( { type : "get", url : "http://localhost:8080/TestJOSNP/TestJSONPServlet", dataType : "jsonp", jsonpCallback : "success", success : function(json) { alert('调用成功!'); }, error: function(jqXHR, textStatus, errorThrown) { alert("调用失败!"); } }); }); function success_jsonpCallback(data) { success(data); } </script> </head> <body> </body> </html>
其次,servlet的实现:
package com.learning; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestJSONPServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // json字符串 String retStr = "\"[{'retcode', '5'}]\""; try { // 写回客户端 resp.getWriter().write("success_jsonpCallback(" + retStr + ")"); } catch (IOException ex) { ex.printStackTrace(); } } }
ajax的jsonpCallback参数,为jsonp请求指定一个回调函数名,这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成自己独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。
ajax jsonp与普通的ajax请求的主要区别在于——请求响应结果的处理。也就是说,调用jsonp回调函数success_jsonpCallback,并将要响应的字符串或json传入此方法(作为参数值)。此外,ajax jsonp对于同步或异步请求没有影响。
相关推荐
首先,要启用jQuery的跨域支持,我们需要设置`jQuery.support.cors`为`true`,这允许jQuery执行跨域请求。在示例代码中,有这样一行: ```javascript jQuery.support.cors = true; ``` 这是解决“no transport”错误...
本实例将探讨如何通过JSONP(JSON with Padding)解决JavaScript的跨域请求,同时介绍在J2EE环境中如何添加和使用日志文件来跟踪系统运行状态。 首先,我们来看**JS跨域**。跨域主要涉及两个技术:CORS(Cross-...
7. **跨域请求** 如果你的AJAX请求需要跨域,可以考虑使用JSONP(JSON with Padding)或者CORS(Cross-Origin Resource Sharing)策略。 8. **ASP.NET MVC中的AJAX调用** 在ASP.NET MVC中,我们可以创建一个...
在实际开发中,前端应用往往需要从其他域获取数据,例如使用CDN或者调用第三方服务API,这时就涉及到跨域请求的问题。 跨域请求通常有以下几种解决方案: 1. JSONP (JSON with Padding) 是一种古老的跨域请求技术...
在上述代码中,我们使用 jQuery 发起了一个 GET 请求来获取 `http://localhost:1661/` 的内容,并弹出返回值。 在 ASP.NET Core 中实现 CORS 跨域可以解决浏览器和服务器之间的跨域限制问题,提高了 Web 应用的安全...
6. JSONP跨域技术:在JavaScript中,可以利用script标签不受同源策略限制的特性,通过动态创建script标签的形式来实现跨域请求。JSONP(JSON with Padding)是一种跨域请求的解决方案,适用于GET类型的请求。服务器...
综上所述,Ajax获取页面返回值涉及创建XMLHttpRequest对象、打开连接、设置回调、发送请求、处理返回值以及错误处理等多个步骤。在实际开发中,还可以结合jQuery、axios等库简化Ajax操作。通过掌握这些知识,你可以...
4. **AJAX**:jQuery的`$.ajax()`和`$.get()`、`$.post()`等函数简化了异步数据请求,让跨域请求变得容易。 5. **动画**:`.fadeIn()`, `.slideToggle()`, `.animate()`等方法让创建复杂的动画效果变得轻松。 6. *...
在Web开发中,跨域(Cross-Origin)是一个常见的问题,它限制了JavaScript从一个源(Origin)向另一...然而,在很多情况下,JSONP仍然是实现跨域请求的一个有效手段,尤其在不支持CORS(跨源资源共享)的旧版浏览器中。
此时,服务器需要支持CORS(跨源资源共享)或者使用JSONP(JSON with Padding)来允许跨域请求。 7. **AJAX与页面刷新**:AJAX(Asynchronous JavaScript and XML)技术,包括`$.post`,其核心理念就是实现页面的...
这一策略主要是出于安全考虑,防止恶意脚本通过跨域请求窃取数据。 1.1.1 伪静态实现 伪静态是一种技术手段,用于使动态页面看起来像静态HTML页面,以利于搜索引擎抓取和收录。这样做是因为搜索引擎通常更偏好静态...
由于是跨域请求,我们需要使用JSONP(JSON with Padding)或CORS(Cross-Origin Resource Sharing)机制。 例如,使用JSONP: ```javascript function callService(callback) { var script = document....
2. `$.ajax()`更新:jQuery 1.7.1对异步请求的`.ajax()`方法进行了优化,增强了错误处理和数据类型检测,同时支持跨域请求。 3. `.promise()`和`.done()`:这两个方法改进了异步操作的流程控制,`.promise()`返回一...
jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时...
- 对于AJAX请求,`$.ajax()`函数支持JSONP跨域请求,增强了异步数据获取的灵活性。 3. **jQuery API帮助文档** - **chm格式**:这是一种Windows平台上的帮助文档格式,包含索引、搜索等功能,便于开发者快速查找...
jQuery 1.3支持JSONP跨域请求,增强了Ajax的灵活性。同时,`$.ajaxStart()`和`$.ajaxStop()`可以监听Ajax请求的开始和结束。 ### 6. 插件机制 jQuery的插件机制是其强大之处,开发者可以通过扩展$.fn对象创建新的...
JSONP(JSON with Padding)是跨域数据交互的一种解决方案,jQuery 1.5支持JSONP请求,允许从不同源获取数据。 10. **API文档** 提供的中文版API文档对于开发者来说是一大福音,它详细解释了每个方法的功能、参数...
- **$.ajax()**: 核心的Ajax方法,支持GET和POST请求,以及JSONP跨域请求。 - **$.get()** 和 **$.post()**: 简化的GET和POST请求方法。 - **$.getJSON()**: 获取JSON数据的便捷方法。 - **$.load()**: 加载服务器...