解决JS跨域与AJAX parsererror:Struts2 + Spring 实战
需积分: 50 160 浏览量
更新于2024-09-08
收藏 1KB TXT 举报
"解决js跨域问题以及ajax报parsererror,主要涉及struts2+Spring框架下的JSONP处理。"
在Web开发中,由于浏览器的安全策略,不同源的JavaScript代码之间不能进行通信,这就是著名的同源策略。然而,为了实现某些功能,如前端向后端API请求数据,我们需要克服这一限制,这催生了跨域解决方案。这里,我们关注的是使用JSONP(JSON with Padding)来解决跨域问题,同时处理jQuery AJAX请求中可能出现的"parsererror"。
JSONP是一种绕过同源策略的方法,通过动态创建`<script>`标签并将其`src`属性设置为服务端的URL,由于`<script>`标签不受同源策略限制,可以加载任何源的脚本。服务端返回的不是JSON格式的数据,而是包裹在函数调用中的JSON数据,如`myCallback({key: 'value'})`。前端通过预先定义这个`myCallback`函数来接收和解析返回的数据。
在Struts2+Spring的环境中,我们可以这样处理JSONP请求:
1. **后端处理**:
- 首先,获取前端传递的回调函数名,这里是`callback`参数:`String callback = request.getParameter("callback")`。
- 然后,构建JSONP格式的响应。这里我们创建一个字符串`json`,包含回调函数名和返回的JSON数据:`json = jsonpcallback + "({returnFlag:" + bln + ",taskid:" + taskid + "});"`。
- 最后,设置响应的输入流,将JSONP字符串作为内容返回:`setInputStream(new ByteArrayInputStream(json.getBytes("UTF-8")));`,并返回ACTION的SUCCESS状态。
2. **前端使用jQuery AJAX请求**:
- 设置AJAX请求的URL,注意添加了`callback=?`,这是jQuery自动替换为实际回调函数名的地方:`url: "http://localhost:8089/xx/xx/xx.action?callback=?",`。
- 指定请求类型为GET:`type: 'GET'`。
- 数据类型设置为JSONP:`dataType: "jsonp"`。
- 定义JSONP回调函数名:`jsonp: "callback"`,与后端匹配。
- 自定义回调函数名:`jsonpCallback: "jsonpcallback"`,如果后端有特殊要求或自定义处理。
- 在`success`函数中处理返回的数据,如`alert(resp.returnFlag)`。
- 添加`error`处理函数,用于捕获并显示错误信息。
在处理JSONP时,务必确保前后端的回调函数名一致,否则前端无法正确解析服务端返回的数据,可能会导致"parsererror"。同时,后端返回的数据必须严格按照JSONP的格式,即包裹在函数调用中,否则也会导致解析失败。
在上述代码示例中,前端通过`$.ajax`发送了一个带有`callback=?`的GET请求,后端接收到请求后根据`callback`参数生成了JSONP格式的响应`jsonpcallback({returnFlag:1,taskid:1})`,最后前端的`jsonpcallback`函数被调用,从而成功接收并处理了跨域数据。
总结来说,解决js跨域和"parsererror"的关键在于理解和正确实现JSONP机制,确保前后端关于回调函数的约定一致,并且服务端返回的数据格式符合JSONP的规范。
2020-10-20 上传
2020-10-20 上传
2020-12-09 上传
2019-08-12 上传
2010-08-22 上传
2008-01-17 上传
2011-12-22 上传
2008-12-24 上传
2011-08-18 上传
幺儿的csdn
- 粉丝: 5
- 资源: 5
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载