纯js的ajax readyState不返回4,jquery的$.ajax执行error,status200且数据可显示
来源:互联网 发布:淘宝怎么查快递到哪了 编辑:程序博客网 时间:2024/06/05 23:44
使用php请进入 http://blog.csdn.net/hzz780/article/details/42124607
本文最后的解决方案是使用$.post 并且在java中setPost里面setContentType(text/javascript);
应该的真实原因和$.ajax的解决方案请见我的另一博文http://blog.csdn.net/hzz780/article/details/31393513《$.ajax接受json, 返回error》
今天开发基于java的web项目的时候,在修改了java文件后,想获取json数据,发现无论如何也无法执行jquery $.ajax里的succes或是$.post或者是其他的回调函数。
jquery的情况
$.ajax({url: "http://localhost:8080/club/privilegeGroup?act=listGroup&type=json",data: "username=hzz",type: 'post',dataType: 'json',success: function(data) {console.log('success');},error: function(xhr,textStatus, errorThrown) { console.log(errorThrown);console.log('error');}});这样执行的都是error, 但是用chrome审查元素的时候,会发现返回200OK,并且能获取数据。 从headers中看不出什么异常,设断点也没发现什么(如果谁发现了请告诉我一下。)
当时感到莫名其妙,虽然有意识想到是因为 servlet文件改了,但是还是从js这里看看吧。
纯js的情况
想起了5个状态,随又回到了纯js时光
/* test */function createRequest () { // body... try { request = new XMLHttpRequest(); }catch(tryMS){ try{ request = new AcitveXObject("Msxm12.XMLHTTP"); }catch(otherMS){ try{ request = new AcitveXObject("Microsoft.XMLHTTP"); } catch(failed){ request=null; } }} return request;}function registerUser(){ var registerRequest = createRequest(); if(registerRequest==null){ } else{ var url = "www.twt.edu.cn";//自己设置啦 var requestData = ""; registerRequest.onreadystatechange = doShow; registerRequest.open("GET",url,true); // registerRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); registerRequest.send(null); }}function doShow(){if (request.readyState == 4) {if (request.status == 200) {console.log('4');}}else if(request.readyState == 3){console.log("state 3");}else if(request.readyState == 2){console.log("state 2");}else if(request.readyState == 1){console.log("state 1");}}readyState 123都有,就是没有4. 遂笃定,肯定java里面改了什么东西。
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/javascript");//现在返回的是我们想要的json数据了doGet(request,response);}
最后发现是response.setContentType(MIME); 导致的, 它的作用是使浏览器区分不同种类的数据, 所以涉及数据交互时,大家一定要注意了。
原来传数据的时候设置成了 text/html,(或者是其他), 将其改成text/javascript即可,即能正确返回json数据了,或是解决回调函数不能执行的问题。
最后使用的代码段是
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");request.setCharacterEncoding("utf-8");response.setContentType("text/html");process(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/javascript");doGet(request,response);}
$.post(url, data, function(){});
0 0
- 纯js的ajax readyState不返回4,jquery的$.ajax执行error,status200且数据可显示
- jquery 的 ajax的dataType,服务器返回了数据,但是succes:function(data)不执行
- php ajax error(如果使用纯js,无法返回状态4的情况)
- $.ajax返回不执行success的原因
- $.ajax返回不执行success的原因
- 纯 js 的 Ajax
- 纯js的ajax
- JQuery ajax返回error的原因定位
- Jquery ajax不执行success的原因
- jquery遍历ajax返回的json数据
- jQuery的Ajax接收java返回数据
- Ajax 执行返回的服务器端返回的js
- Ajax 执行返回的服务器端返回的js
- Ajax xmlHttpRequest的readystate属性
- 用js处理ajax返回的数据
- jquery ajax 从后台返回json结果后 不执行success方法的问题
- AJAX:ajax的五种状态---readyState
- 纯JS版的Ajax
- 10382 - Watering Grass(贪心 区间覆盖问题)洒水面覆盖
- 常用的设计模式场景
- Linux安装Oracle JDK替换OpenJDK详解
- 《Programming in Lua 3》读书笔记(二)
- Python参考手册(第4版) 学习笔记1
- 纯js的ajax readyState不返回4,jquery的$.ajax执行error,status200且数据可显示
- lua学习总结
- PHP 杂谈 坑爹的file_exists
- java保留两位小数4种方法
- Python参考手册(第4版) 学习笔记2
- POJ2080_Calendar(模拟)
- zoj 3129 Japan
- springMVC3学习--Interceptor拦截器
- java反射详解