前端Ajax请求代码如下:

window.onload=function()
{ var url='http://127.0.0.1:8080/testpj/ErrorlogServlet'; $.ajax({
type : "GET",
url : url,
async: false,
dataType: "jsonp",
jsonp: "callback",
beforeSend: function() {},
success : function(data) {
alert('ok');
},
error : function() {
alert('false');
}
}); }

后台Servlet接口如下: 

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
JSONObject jsonObject = new JSONObject();
String callback = request.getParameter("callback");
String jsondata = "{\"logPath\":\"1\",\"success\":true}";
String res = callback + "(" + jsondata + ")";
PrintWriter out = null;
try {
out = response.getWriter();
out.write(res);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}

先说JSON与JSONP:JSON(JavaScript Object Notation)是一种数据交换格式,而JSONP(JSON with Padding)是一个可以解决浏览器跨域问题的协议。

再说JSONP原理:由于浏览器同源策略,Ajax直接请求其他服务接口会存在跨域问题,但我们又会发现web页面调用js文件时则不受跨域问题影响(比如<script>、<img>、<iframe>),如果想通过web跨域访问数据就只能在服务端把数据装进js格式的文件里,供客户端调用。于是,JSONP协议出现了,该协议允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

最后谈谈Ajax与JSONP:上面客户端获取远程数据的方式看起来非常像Ajax,但其实并不一样,Ajax(Asynchronous Javascript and XML)核心是 JavaScript 对象XMLHttpRequest,通过这个对象,Javascript向服务器提出请求并处理响应而不阻塞用户。而JSONP的核心是动态添加<script>标签来调用服务器提供的js脚本。

本例中,前端代码因为使用到了JSONP,后台Servlet接口开始并没有加上callback参数,所以才出现前端Ajax请求拿不到JSON数据情况出现。

解决Ajax请求后台Servlet接口拿不到JSON数据问题的更多相关文章

  1. C# 请求Web Api 接口,返回的json数据直接反序列化为实体类

    须要的引用的dll类: Newtonsoft.Json.dll.System.Net.Http.dll.System.Net.Http.Formatting.dll Web Api接口为GET形式: ...

  2. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  3. 解决ajax请求(SpringMVC后台)响应415/400/405错误

    解决ajax请求(SpringMVC后台)响应415/400/405错误 后端代码 bean public class user { private String username; private ...

  4. jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法

    jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...

  5. 解决.NET Core Ajax请求后台传送参数过大请求失败问题

    解决.NET Core Ajax请求后台传送参数过大请求失败问题 今天在项目上遇到一个坑, 在.Net Core中通过ajax向mvc的controller传递对象时,控制器(controller)的 ...

  6. 前台返回json数据的常用方式+常用的AJAX请求后台数据方式

    我个人开发常用的如下所示: 之所以像下面这样下,一是前台Ajax,二是为安卓提供接口数据 现在常用的是返回JSON数据,XML的时代一去不复返 JSON相对于XML要轻量级的多 对JSON不是十分熟悉 ...

  7. 解决Ajax请求跨域问题

    from:https://blog.csdn.net/wang379275614/article/details/53333775 上篇文章提到,由于浏览器的同源策略,使得,AJAX请求只能发给同源的 ...

  8. ajax请求node.js接口时出现 No 'Access-Control-Allow-Origin' header is present on the requested resource错误

    ajax请求node.js接口出现了如下的错误: XMLHttpRequest cannot load http://xxx.xxx.xx.xx:8888/getTem?cityId=110105&a ...

  9. ajax请求、servlet返回json数据

    ajax请求.servlet返回json数据 1.方式一 response.setcontenttype("text/html;charset=utf-8"); response. ...

随机推荐

  1. [转]Windows10中Virtualbox没办法选择和安装64位的Linux系统

    本文转自:https://blog.csdn.net/strivenoend/article/details/78290325 明明在公司的WIN7系统中使用Virtualbox就可以安装64位的Ub ...

  2. git clone 指定分支

    使用Git下载指定分支命令为:git clone -b 分支名仓库地址 克隆asp.net core 2.1.6版本 git clone -b 2.1.6 https://github.com/asp ...

  3. OGNL详解

    A.什么是OGNL? 全称叫ObjectGraphic Navigation Language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了 ...

  4. 003. 什么是 正向代理 & 反向代理

    正向代理: 客户端的代理: 反向代理: 服务端的代理:

  5. 用存储过程向数据库添加大量数据【mysql】

    预分配ID的设计,需要先为数据库生成大量的数据.比如对用户ID有要求的系统,那么用户ID就要预先生成. 通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条 ...

  6. 测者的测试技术手册:智能化测试框架EvoSuite的一个坑以及填坑方法

    问题 最近在不断地学习和探索EvoSuite框架的时候,在生产JUnit单元测试框架后,出现如下问题: Exception: Caused by: org.evosuite.runtime.TooMa ...

  7. springCloud feign使用/优化总结

    基于springCloud Dalston.SR3版本 1.当接口参数是多个的时候 需要指定@RequestParam 中的value来明确一下. /** * 用户互扫 * @param uid 被扫 ...

  8. Jenkins 配置GitLab插件和Git插件

    本文演示如何在安装完Jenkins之后,配置GitLab插件和Git插件. 1 安装插件 浏览器登录Jenkins Web UI,点击系统管理,再点击管理插件,切换到可选插件,分别搜索GitLab P ...

  9. HTML 、XHTML、H5的区别:

    概括: HTML指的是HTML4.01:HTML是标记/设计语言.XHTML是HTML的过渡版:XHTML是可扩展的标记语言. H5是HTML的升级版.H5是一门编程语言. 区别: 1.XHTML标签 ...

  10. C#多线程和线程池 【转】

    1.概念  1.0 线程的和进程的关系以及优缺点 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,C ...